* AutoPagerize LazyLoad Assistant

It fixes the lazy load image problem of some AutoPagerize scripts, extensions or add-ons, occuring on second or latter pages.

  1. // ==UserScript==
  2. // @name * AutoPagerize LazyLoad Assistant
  3. // @name:ja * AutoPagerize LazyLoad Assistant
  4. // @name:zh-CN * AutoPagerize LazyLoad Assistant
  5. // @namespace knoa.jp
  6. // @description It fixes the lazy load image problem of some AutoPagerize scripts, extensions or add-ons, occuring on second or latter pages.
  7. // @description:ja 一部の AutoPagerize スクリプト、拡張機能、アドオンで発生する、2ページ目以降の遅延読み込み画像の問題を修正します。
  8. // @description:zh-CN 修复某些 AutoPagerize 脚本、扩展和附加中出现的第二页或更高版本的延迟加载图像问题。
  9. // @include *
  10. // @version 1.1.3
  11. // @grant none
  12. // ==/UserScript==
  13.  
  14. /*
  15. [update]
  16. Minor fix.
  17. */
  18. (function() {
  19. const SCRIPTID = 'AutoPagerizeLazyLoadAssistant';
  20. const FLAGNAME = 'lazyLoadAssistant';
  21. const DATASETS = [
  22. 'src',
  23. 'lazySrc',
  24. 'original',
  25. 'delay',
  26. 'img',
  27. ];
  28. let name = undefined; //そのページで使われている lazyload プロパティ名は一度確定したら変わらない
  29. document.addEventListener('GM_AutoPagerizeNextPageLoaded', e => {
  30. console.log(SCRIPTID, 'event:', e.type);
  31. const d = e.target; //残念ながら pageElement ではなく document になる
  32. const imgs = d.querySelectorAll('img'); //ここで FLAGNAME 付きを除外する処理は重いのでシンプルに全取得する
  33. for(let i = 0; imgs[i]; i++){
  34. if(name === undefined){
  35. name = DATASETS.find(n => imgs[i].dataset[n]);
  36. if(name) console.log(SCRIPTID, 'dataset:', name);
  37. else continue;
  38. }
  39. if(imgs[i].dataset[FLAGNAME]) continue; //処理済み
  40. else if(imgs[i].dataset[name]){
  41. imgs[i].src = imgs[i].dataset[name];
  42. imgs[i].style.opacity = 1; //一部のサイトに必要
  43. imgs[i].style.visibility = 'visible'; //一部のサイトに必要
  44. imgs[i].dataset[FLAGNAME] = 'true';
  45. }
  46. }
  47. });
  48. })();