您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Resizes item try on preview to 3x.
// ==UserScript== // @name GaiaOnline Avatar Try-On Resizer // @namespace https://www.gaiaonline.com/profiles/jasska // @version 2.1 // @author Jasska // @description Resizes item try on preview to 3x. // @match https://www.gaiaonline.com/marketplace/itemdetail/* // @grant GM_addStyle // @license MIT // ==/UserScript== (function() { 'use strict'; // Add CSS to override Gaia's styles GM_addStyle(` #img_avatar_preview { width: 122px !important; height: 152px !important; min-width: unset !important; min-height: unset !important; max-width: unset !important; max-height: unset !important; } `); const IFRAME_ID = 'img_avatar_preview'; const CHECK_INTERVAL = 500; let currentIframe = null; // Dimensions (matches Gaia's original size) const sizes = { default: { width: '120px', height: '150px' }, enlarged: { width: '360px', height: '450px' } }; function applyPixelatedStyle(img) { img.style.setProperty('image-rendering', 'crisp-edges', 'important'); img.style.setProperty('image-rendering', 'pixelated', 'important'); } function performResize(iframe) { const iframeDoc = iframe.contentDocument || iframe.contentWindow.document; const avatarImg = iframeDoc.querySelector('.oldavatar'); const img = iframeDoc.querySelector('.oldavatar img'); if (!img) return; if (!avatarImg) return; applyPixelatedStyle(img); // Reapply styles const size = sizes.enlarged; // Resize image avatarImg.style.width = size.width; avatarImg.style.height = size.height; // Force iframe resize iframe.style.cssText = ` width: ${size.width} !important; height: ${size.height} !important; border: 0; `; currentIframe = iframe; } function reactToImageUpdates() { const iframe = document.getElementById(IFRAME_ID); if (!iframe) return; // 1. Wait for iframe to load (initial load) iframe.onload = function() { // 2. Wait for .oldavatar to exist inside the iframe const checkForAvatar = () => { try { const iframeDoc = iframe.contentDocument || iframe.contentWindow.document; const avatarImg = iframeDoc.querySelector('.oldavatar'); if (!avatarImg) { setTimeout(checkForAvatar, 100); // Retry in 100ms return; } // 3. Now that avatarImg exists, set up MutationObserver const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { if (mutation.type === 'attributes' && mutation.attributeName === 'src') { console.log("Avatar src updated - resizing"); performResize(iframe); } // If the entire image is replaced (not just src change) if (mutation.type === 'childList') { console.log("Avatar element replaced - resizing"); performResize(iframe); } }); }); // Watch for changes to avatarImg observer.observe(avatarImg, { attributes: true, attributeFilter: ['src'], childList: true, subtree: true }); console.log("here"); // Initial resize performResize(iframe); } catch (e) { console.error("Error setting up observer:", e); } }; checkForAvatar(); // Start checking for avatarImg }; // If iframe is already loaded, trigger manually if (iframe.contentDocument?.readyState === 'complete') { iframe.onload(); // Force trigger } } reactToImageUpdates(); })();