您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
设置获取配置的APIs
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/476522/1264431/Config_Manager.js
// ==UserScript== // @name Config_Manager // @namespace Violentmonkey Scripts // @grant GM_getValue // @grant GM_setValue // @grant GM_addValueChangeListener // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @author axototl // @license AGPL-3.0-or-later // @description 设置获取配置的APIs // ==/UserScript== 'use strict'; (() => { 'use strict'; const _APIs = ["GM_getValue", "GM_setValue", "GM_addValueChangeListener", "GM_registerMenuCommand", "GM_unregisterMenuCommand"]; for (const val in _APIs) if (eval("typeof " + val) === 'undefined') throw new Error("需要" + val + " API权限!!!"); })(); const config = {}; const inplace = (() => { const id = "test"; const cap = GM_registerMenuCommand("测试", Function.prototype, {id}); GM_unregisterMenuCommand(cap); return (cap === id); })(); const register = (() => { const boolean_prefix = ["❌(已禁用) ", "✅(已启用) "]; const int_family = ['uint', 'int']; return ({name, default: def, type = "other", desc: prompts, tips: ipt, input: func = prompt, callback: listener = Function.prototype, init = false, autoClose = true, judge: _jud}) => { // let val = GM_getValue(name, def); // config[name] = val; const judge = (() => { if (typeof _jud === 'function') return _jud; return () => true; })(); Object.defineProperty(config, name, { get: () => GM_getValue(name, def), set: val => GM_setValue(name, val) }); if (typeof init === 'function') init(name, config[name]); if (int_family.includes(type)) { const judge = (type === 'uint') ? (s => (s|0) < 0) : (()=>false); if (func === prompt) { func = () => { let p; do {p = prompt(ipt);} while(isNaN(p) || judge(p)); return p; }; } type = 'other'; } if (type === 'bool') { let cont; const reg = () => cont = GM_registerMenuCommand(boolean_prefix[config[name] | 0] + prompts, () => { const newval = !config[name]; if (judge(name, newval)) config[name] = newval; }, {id: name, autoClose}); if (true == init) listener(name, config[name], config[name], cont); const stn = (() => { const re_reg = inplace ? reg : () => (GM_unregisterMenuCommand(cont), reg()); return (_1, ov, nv) => (reg(), listener(name, ov, nv, cont)); })(); GM_addValueChangeListener(name, stn); reg(); } else if (type === "other") { const cont = GM_registerMenuCommand(prompts, () => { const inp = func(); if (judge(name, inp)) GM_setValue(name, inp); }, {id: name, autoClose}); if (true == init) listener(name, config[name], config[name], cont); GM_addValueChangeListener(name, (_1, ov, nv) => listener(name, ov, nv, cont)); } console.debug(type, name, "\nRegistered!"); }; })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址