您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A userscript library for adding support back to GM_ non async functions
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/534637/1581445/LegacyGMjs.js
- /* LegacyGM.js
- - Version: 1.0.3
- - Author: Haka
- - Description: A userscript library for adding support back to GM_ non async functions
- - GitHub: https://github.com/Psyyke/A.C.A.S/
- */
- async function LOAD_LEGACY_GM_SUPPORT() {
- if(typeof GM !== 'object') return;
- const noLegacyInfo = typeof GM_info === 'undefined' && typeof GM?.info !== 'undefined',
- onlyModernSet = typeof GM?.setValue === 'function' && typeof GM_setValue === 'undefined',
- onlyModernGet = typeof GM?.getValue === 'function' && typeof GM_getValue === 'undefined',
- onlyModernList = typeof GM?.listValues === 'function' && typeof GM_listValues === 'undefined',
- deleteValueExists = typeof GM?.deleteValue === 'function',
- openInTabExists = typeof GM?.openInTab === 'function';
- if(noLegacyInfo) globalThis.GM_info = GM.info;
- if(!onlyModernList && !onlyModernGet && !onlyModernSet) return;
- const gmCache = {};
- const gmFunctions = {
- GM_setValue: (key, value) => {
- GM.setValue(key, value);
- gmCache[key] = value;
- },
- GM_getValue: (key, defaultValue) => {
- return key in gmCache ? gmCache[key] : defaultValue;
- },
- GM_deleteValue: (key) => {
- GM.deleteValue(key);
- delete gmCache[key];
- },
- GM_listValues: () => {
- return Object.keys(gmCache);
- },
- GM_openInTab: (url, options = false) => {
- if(openInTabExists)
- return GM.openInTab(url, options);
- return window.open(url, '_blank');
- },
- };
- setInterval(async () => {
- const keys = await GM.listValues();
- // Load existing
- for(const key of keys) {
- gmCache[key] = await GM.getValue(key);
- }
- // Remove old
- for(const key in gmCache) {
- if(!keys.includes(key)) {
- delete gmCache[key];
- }
- }
- }, 1);
- // Define legacy functions
- for(const [name, func] of Object.entries(gmFunctions)) {
- if(typeof globalThis[name] === 'undefined') {
- Object.defineProperty(globalThis, name, {
- value: func,
- writable: false,
- configurable: false,
- enumerable: false,
- });
- }
- }
- }