// ==UserScript== // @name Warframe Market 物品名称中英对照显示 支持搜索 // @version 1.6 // @description Warframe Market 物品名称中英对照显示 老外买东西再也不用翻译英文一个一个找了,直接搜索输入就出来 // @author hhq // @license GPL-3.0 // @match https://warframe.market/zh-hans/profile/* // @grant none // @run-at document-start // @namespace https://greasyfork.org/users/598831 // @downloadURL none // ==/UserScript== (function() { 'use strict'; const TARGET_KEY = 'manifests/items'; let interceptedCount = 0; // 记录拦截修改次数 // --- 数据修改函数 --- function modifyItemNames(itemsManifest) { let modifiedCount = 0; if (!itemsManifest || typeof itemsManifest !== 'object') return itemsManifest; for (const itemId in itemsManifest) { if (itemsManifest.hasOwnProperty(itemId)) { const item = itemsManifest[itemId]; try { const zhName = item.i18n['zh-hans']?.name; const enName = item.i18n.en?.name; if (zhName && enName && !zhName.includes(`(${enName})`)) { item.i18n['zh-hans'].name = `${zhName} (${enName})`; modifiedCount++; } } catch (e) { /* ignore */ } } } return itemsManifest; } // ---------------------- // 1. 备份原始的 localStorage.getItem 方法 const originalGetItem = localStorage.getItem; // 2. 重写 localStorage.getItem 方法 (内存修改) localStorage.getItem = function(key) { const originalString = originalGetItem.apply(this, arguments); if (key === TARGET_KEY && originalString) { try { // *** 拦截成功,在内存中修改 *** interceptedCount++; console.warn(`脚本:内存拦截成功!目标键 "${TARGET_KEY}" 已被拦截并修改返回。`); const originalData = JSON.parse(originalString); const modifiedData = modifyItemNames(originalData); return JSON.stringify(modifiedData); // 返回修改后的数据 } catch (e) { console.error("内存修改发生错误,返回原始数据:", e); } } return originalString; // 返回原始数据 }; // ---------------------------------------------------- // 3. 延迟检查:如果网站在脚本重写前已经读取了数据,我们就强制写入,并提示用户刷新。 // ---------------------------------------------------- window.addEventListener('load', () => { // 如果拦截成功 (interceptedCount > 0),则无需额外操作 if (interceptedCount > 0) { console.log("拦截已生效,无需强制修改磁盘。"); return; } // 如果拦截失败 (interceptedCount === 0),执行强制写入 (方案四逻辑) console.log("🚨 警告:网站可能在脚本重写前读取了缓存。正在执行强制写入磁盘..."); try { const originalString = originalGetItem.call(localStorage, TARGET_KEY); // 使用原始方法读取 if (originalString) { const originalData = JSON.parse(originalString); const modifiedData = modifyItemNames(originalData); const modifiedString = JSON.stringify(modifiedData); // 使用原始方法写入 localStorage.setItem(TARGET_KEY, modifiedString); console.log(`✅ 强制写入成功!请 **刷新页面** (F5) 以读取新的缓存数据并查看效果。`); } else { console.log(`键 "${TARGET_KEY}" 没有数据,无法执行强制写入。`); } } catch (e) { console.error("强制写入磁盘失败:", e); } }); })();