您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
NodeSeek论坛增强脚本
当前为
// ==UserScript== // @name 星渊NS助手 // @namespace https://www.nodeseek.com/ // @version 0.1.0 // @description NodeSeek论坛增强脚本 // @author stardeep // @match https://www.nodeseek.com/* // @icon https://drstth.com/download/favicon.ico // @grant GM_addStyle // @grant GM_setValue // @grant GM_getValue // @grant GM_xmlhttpRequest // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant GM_info // @run-at document-start // ==/UserScript== (function() { 'use strict'; console.log('[NS助手] 脚本开始加载'); const CONFIG_URL = 'https://raw.githubusercontent.com/stardeep925/NSaide/main/modules/config.json'; const loadConfig = () => { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: 'GET', url: `${CONFIG_URL}?t=${Date.now()}`, nocache: true, headers: { 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0' }, onload: (response) => { if (response.status === 200) { try { const config = JSON.parse(response.responseText); resolve(config); } catch (error) { reject(error); } } else { reject(new Error(`配置加载失败: ${response.status}`)); } }, onerror: reject }); }); }; const loadModule = (moduleInfo) => { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: 'GET', url: `${moduleInfo.url}?t=${Date.now()}`, nocache: true, headers: { 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0' }, onload: (response) => { if (response.status === 200) { try { eval(response.responseText); resolve(); } catch (error) { reject(error); } } else { reject(new Error(`模块加载失败: ${response.status}`)); } }, onerror: reject }); }); }; const createNS = () => { window.NS = { version: GM_info.script.version, modules: new Map(), isReady: false, registerModule(moduleDefinition) { if (!moduleDefinition || !moduleDefinition.id || !moduleDefinition.init) { return; } const module = { ...moduleDefinition, enabled: GM_getValue(`module_${moduleDefinition.id}_enabled`, true) }; this.modules.set(moduleDefinition.id, module); }, init() { if (this.isReady) { return; } this.modules.forEach((module, id) => { try { if (module.enabled) { module.init(); } } catch (error) { console.error(`[NS助手] 模块 ${module.name} (${id}) 初始化失败:`, error); } }); this.isReady = true; } }; window.NSRegisterModule = (moduleDefinition) => { window.NS.registerModule(moduleDefinition); }; }; createNS(); const initializeModules = async () => { try { const config = await loadConfig(); await Promise.all(config.modules.map(loadModule)); if (window.NS.modules.size > 0) { window.NS.init(); } } catch (error) { console.error('[NS助手] 初始化失败:', error); } }; if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initializeModules); } else { initializeModules(); } })();