您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
Helper functions
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/477604/1266050/kiv-lib.js
const waitFor = (target, selector) => { return new Promise(resolve => { if (target.querySelector(selector)) { return resolve(target.querySelector(selector)); } const observer = new MutationObserver(mutations => { if (target.querySelector(selector)) { resolve(target.querySelector(selector)); observer.disconnect(); } }); observer.observe(document.body, { childList: true, subtree: true }); }); }; const gmGet = async (url, cache_key) => { if (cache_key) { const cachedData = localStorage.getItem(cache_key); const cachedTimestamp = parseInt(localStorage.getItem(cache_key + "_timestamp")); if (cachedData && cachedTimestamp && (Date.now() - cachedTimestamp) < 60 * 60 * 1000) { return JSON.parse(cachedData); } } return new Promise((resolve, reject) => { GM.xmlHttpRequest({ url, method: "GET", onload: (response) => { resolve(new Response(response.response, { statusText: response.statusText, status: response.status })); }, onerror: (error) => { reject(error); } }); }) .catch((error) => { throw { message: "critical error", code: error.status }; }) .then((response) => { const result = response.json(); return result.then((body) => { if (typeof body.error == 'undefined') { if (cache_key) { localStorage.setItem(cache_key, JSON.stringify(body)); localStorage.setItem(cache_key + "_timestamp", Date.now()); } return body; } else { throw { message: body.error.error, code: body.error.code }; } }); }); };