您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动加载GameBanana网站Mods上的完整版图片
// ==UserScript== // @name GameBanana Mods Full Images Loader // @namespace http://tampermonkey.net/ // @version 1.0 // @description 自动加载GameBanana网站Mods上的完整版图片 // @author Zhao_zzZ // @match https://gamebanana.com/mods/* // ==/UserScript== (function() { 'use strict'; // 等待页面加载完成 function waitForElement(selector, callback, maxTries = 50) { if (maxTries <= 0) { console.log('GameBanana Full Images: 元素未找到:', selector); return; } const element = document.querySelector(selector); if (element) { callback(element); } else { setTimeout(() => waitForElement(selector, callback, maxTries - 1), 100); } } // 处理图片URL,移除尺寸前缀获取完整版 function getFullImageUrl(thumbnailUrl) { // 匹配缩略图URL模式:https://images.gamebanana.com/img/ss/mods/尺寸前缀_文件名.jpg const match = thumbnailUrl.match(/https:\/\/images\.gamebanana\.com\/img\/ss\/mods\/(\d+-\d+_)?(.+\.jpg)/); if (match) { const filename = match[2]; return `https://images.gamebanana.com/img/ss/mods/${filename}`; } return thumbnailUrl; // 如果无法解析,返回原URL } // 处理单个图片元素 function processImage(img) { const originalSrc = img.src; const fullImageUrl = getFullImageUrl(originalSrc); if (fullImageUrl !== originalSrc) { console.log('GameBanana Full Images: 替换图片', originalSrc, '->', fullImageUrl); // 创建新图片对象预加载 const newImg = new Image(); newImg.onload = function() { img.src = fullImageUrl; img.style.transition = 'opacity 0.3s ease-in-out'; }; newImg.onerror = function() { console.log('GameBanana Full Images: 无法加载完整版图片:', fullImageUrl); }; newImg.src = fullImageUrl; } } // 处理Gallery模块中的所有图片 function processGallery() { const gallery = document.querySelector('.Gallery'); if (!gallery) return; const images = gallery.querySelectorAll('img[src*="images.gamebanana.com"]'); images.forEach(processImage); } // 监听DOM变化,处理动态加载的内容 function observeChanges() { const observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.type === 'childList') { mutation.addedNodes.forEach(function(node) { if (node.nodeType === Node.ELEMENT_NODE) { // 检查新添加的元素是否包含图片 const images = node.querySelectorAll ? node.querySelectorAll('img[src*="images.gamebanana.com"]') : []; images.forEach(processImage); // 如果新元素本身就是图片 if (node.tagName === 'IMG' && node.src && node.src.includes('images.gamebanana.com')) { processImage(node); } } }); } }); }); observer.observe(document.body, { childList: true, subtree: true }); } // 主函数 function init() { console.log('GameBanana Full Images: 脚本已启动'); // 等待Gallery模块加载 waitForElement('.Gallery', function() { processGallery(); observeChanges(); }); // 也处理可能已经存在的图片 setTimeout(processGallery, 1000); } // 页面加载完成后启动 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();