// ==UserScript== // @name Shiki.one & Shikimori.one: Direct Image Links // @namespace http://your.namespace.com // @version 1.1 // @description Заменяет проксированные изображения на прямые ссылки (поддерживает shiki.one и shikimori.one) // @author You // @match https://shiki.one/* // @match https://shikimori.one/* // @grant none // ==/UserScript== (function() { 'use strict'; // Функция для декодирования URL из параметра url function getDirectUrl(proxiedSrc) { try { const urlParams = new URLSearchParams(proxiedSrc.split('?')[1]); const encodedUrl = urlParams.get('url'); if (encodedUrl) { return decodeURIComponent(encodedUrl); } } catch (e) { console.warn('Ошибка при обработке URL:', proxiedSrc, e); } return null; } // Функция для проверки, является ли ссылка проксированной function isProxiedUrl(src) { return src && ( src.includes('camo-v3.shiki.one') || src.includes('camo-v3.shikimori.one') ); } // Функция для обновления src у изображений function updateImageSrc() { const images = document.querySelectorAll('img[src]'); images.forEach(img => { if (isProxiedUrl(img.src)) { const directUrl = getDirectUrl(img.src); if (directUrl) { img.src = directUrl; // Очищаем srcset, если есть (чтобы не мешал) if (img.srcset) { img.srcset = ''; } console.log('Заменено:', img.src, '→', directUrl); } else { console.warn('Не удалось извлечь прямую ссылку из:', img.src); } } }); } // Запускаем при загрузке страницы window.addEventListener('load', updateImageSrc); // Наблюдаем за динамически добавляемыми элементами const observer = new MutationObserver(updateImageSrc); observer.observe(document.body, { childList: true, subtree: true }); // Дополнительно проверяем после любых изменений в DOM document.addEventListener('DOMContentLoaded', updateImageSrc); })();
@_Just_Monika_95_