// ==UserScript== // @name Замена background-url в CSS (поддержка shikimori.io) // @namespace http://your.namespace.com // @version 1.1 // @description Декодирует проксированные URL в CSS background-image на сайтах Shikimori (shiki.one, shikimori.one, shikimori.io) // @author You // @match https://shiki.one/* // @match http://shiki.one/* // @match https://shikimori.one/* // @match https://shikimori.io/* // @grant none // ==/UserScript== (function() { 'use strict'; // Функция: находит url(...?url=...) и заменяет на декодированный URL function decodeBackgroundUrl(cssText) { return cssText.replace( /url\s*\(\s*['"]?([^'")]*\?url=([^)'"]+))['"]?\s*\)/g, (match, fullUrl, encodedPart) => { try { const decoded = decodeURIComponent(encodedPart); // Сохраняем кавычки, если они были const quote = match.includes('"') ? '"' : match.includes("'") ? "'" : ''; return `url(${quote}${decoded}${quote})`; } catch (e) { console.warn('Не удалось декодировать URL:', encodedPart, e); return match; // Возвращаем исходный фрагмент при ошибке } } ); } // Обрабатываем все <style>-блоки на странице document.querySelectorAll('style').forEach(styleEl => { const cssText = styleEl.textContent; const newCss = decodeBackgroundUrl(cssText); if (newCss !== cssText) { styleEl.textContent = newCss; console.log('CSS обновлён:', styleEl); } }); // Дополнительно: проверяем, что фон применился setTimeout(() => { const bodyBg = window.getComputedStyle(document.body).backgroundImage; if (bodyBg && bodyBg.includes('url')) { console.log('Фон успешно применён:', bodyBg); } else { console.warn('Фон не отобразился. Проверьте:'); console.log('- Корректность URL:', document.body.style.backgroundImage); console.log('- Наличие CORS-ограничений на изображение'); } }, 1000); })();
Нет комментариев