您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Fix Cloudflare Turnstile performance
// ==UserScript== // @name Internet Roadtrip Fix Cloudflare Turnstile // @namespace jdranczewski.github.io // @match https://neal.fun/internet-roadtrip/* // @version 0.3.1 // @author jdranczewski // @description Fix Cloudflare Turnstile performance // @license MIT // @grant unsafeWindow // @grant GM_setValue // @grant GM_getValue // @run-at document-start // ==/UserScript== (async function() { // Clear the interval, the widget renews every 5 minutes either way if (unsafeWindow.turnstileInterval) { clearInterval(unsafeWindow.turnstileInterval); console.log("Turnstile interval cleared immediately"); } else { let _turnstileInterval; Object.defineProperty(unsafeWindow, "turnstileInterval", { get() { return _turnstileInterval; }, set(turnstileInterval) { _turnstileInterval = turnstileInterval; clearInterval(turnstileInterval); console.log("Turnstile interval cleared after a bit"); }, configurable: true, enumerable: true, }); } // Save the token for 7 minutes, so voting works immediately after reload function saveToken(token) { GM_setValue("IRToken", token); GM_setValue("token_date", Date.now()); } // No token set yet if (!unsafeWindow.IRToken) { const stored_token = GM_getValue("IRToken"); const stored_date = GM_getValue("token_date"); if (stored_token && stored_date && (Date.now() - stored_date) < 420000) { unsafeWindow.IRToken = stored_token; } } let _IRToken = unsafeWindow?.IRToken; Object.defineProperty(unsafeWindow, "IRToken", { get() { return _IRToken; }, set(IRToken) { _IRToken = IRToken; saveToken(IRToken); }, configurable: true, enumerable: true, }); })();