Advertisement
vitnet

TMDB Image Redirect

Mar 23rd, 2025 (edited)
601
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         TMDB Image Redirect
  3. // @namespace    https://image.tmdb.org/
  4. // @version      1.2
  5. // @description  Заменяет ссылки на изображения TMDB на альтернативный домен
  6. // @author       vitnet
  7. // @match        *://*/*
  8. // @grant        none
  9. // ==/UserScript==
  10.  
  11. (function() {
  12.     'use strict';
  13.  
  14.     const imgReplace = 'https://image.tmdb.org/';
  15.     const imgProxy = ['https://imagetmdb.cub.red/', 'https://imagetmdb.com/'];
  16.  
  17.     // Функция для получения случайного прокси-домена
  18.     const getRandomProxy = () => {
  19.         return imgProxy[Math.floor(Math.random() * imgProxy.length)];
  20.     };
  21.  
  22.     // Функция для замены URL изображения
  23.     const replaceImageUrl = (url) => {
  24.         if (url && url.startsWith(imgReplace)) {
  25.             return url.replace(imgReplace, getRandomProxy());
  26.         }
  27.         return url;
  28.     };
  29.  
  30.     // Функция для замены атрибутов изображения
  31.     const replaceImageSrc = (img) => {
  32.         try {
  33.             if (img.src) {
  34.                 img.src = replaceImageUrl(img.src);
  35.             }
  36.             if (img.dataset.src) {
  37.                 img.dataset.src = replaceImageUrl(img.dataset.src);
  38.             }
  39.             if (img.srcset) {
  40.                 img.srcset = img.srcset.replace(new RegExp(imgReplace, 'g'), getRandomProxy());
  41.             }
  42.             if (img.dataset.srcset) {
  43.                 img.dataset.srcset = img.dataset.srcset.replace(new RegExp(imgReplace, 'g'), getRandomProxy());
  44.             }
  45.             if (img.dataset.lazySrc) {
  46.                 img.dataset.lazySrc = replaceImageUrl(img.dataset.lazySrc);
  47.             }
  48.         } catch (error) {
  49.             console.error('Ошибка при замене URL изображения:', error);
  50.         }
  51.     };
  52.  
  53.     // Обрабатываем уже загруженные изображения
  54.     document.querySelectorAll('img').forEach(replaceImageSrc);
  55.  
  56.     // Следим за изменениями в DOM
  57.     const observer = new MutationObserver(mutations => {
  58.         mutations.forEach(mutation => {
  59.             mutation.addedNodes.forEach(node => {
  60.                 if (node.tagName === 'IMG') {
  61.                     replaceImageSrc(node);
  62.                 } else if (node.querySelectorAll) {
  63.                     node.querySelectorAll('img').forEach(replaceImageSrc);
  64.                 }
  65.             });
  66.         });
  67.     });
  68.  
  69.     observer.observe(document.body, { childList: true, subtree: true });
  70.  
  71.     // Дополнительно следим за изменением атрибутов src, data-src, data-srcset и data-lazy-src
  72.     const attrObserver = new MutationObserver(mutations => {
  73.         mutations.forEach(mutation => {
  74.             if (mutation.type === 'attributes' &&
  75.                 (mutation.attributeName === 'src' ||
  76.                  mutation.attributeName === 'data-src' ||
  77.                  mutation.attributeName === 'data-srcset' ||
  78.                  mutation.attributeName === 'data-lazy-src')) {
  79.                 replaceImageSrc(mutation.target);
  80.             }
  81.         });
  82.     });
  83.  
  84.     document.querySelectorAll('img').forEach(img => {
  85.         attrObserver.observe(img, { attributes: true });
  86.     });
  87. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement