后台保活工具集:Web Worker 定时器、音频保活、网络请求监控
目前為
此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.cn-greasyfork.org/scripts/559089/1714656/background-keep-alive.js
解决浏览器后台标签页节流问题的通用工具集,包含三大模块。
// ==UserScript==
// @require https://raw.githubusercontent.com/urzeye/tampermonkey-scripts/main/util/background-keep-alive.user.js
// ==/UserScript==
基于 Web Worker 的保活定时器,绑定后台环境下不被节流。
const timer = new BackgroundTimer(() => {
console.log("心跳:", new Date().toTimeString());
}, 1000);
timer.start(); // 启动
timer.stop(); // 停止
timer.setInterval(2000); // 动态调整间隔
timer.isRunning(); // 获取状态
timer.destroy(); // 销毁实例
使用静音音频对抗 Chrome 5 分钟强力休眠。
⚠️ 需要用户交互后才能启动(浏览器自动播放策略限制)
const audio = new AudioKeepAlive();
// 需要在用户交互后启动
document.addEventListener("click", () => audio.start(), { once: true });
audio.stop(); // 停止
audio.isActive(); // 获取状态
audio.destroy(); // 销毁实例
Hook Fetch 和 XHR 监控任务完成状态,使用防抖 + 活跃计数器算法。
const monitor = new NetworkMonitor({
// 监控的 URL 模式(包含匹配)
// 注意:避免使用通用 RPC 方法如 batchexecute,会产生误判
urlPatterns: ["BardFrontendService", "StreamGenerate"],
// 静默判定时间(毫秒)
silenceThreshold: 3000,
// 任务完成回调
onComplete: (ctx) => {
console.log("任务完成", ctx);
// ctx = { activeCount, lastUrl, timestamp }
},
// 任务开始回调(可选)
onStart: (ctx) => {
console.log("任务开始", ctx);
},
// DOM 二次验证(可选,自定义)
domValidation: (ctx) => {
// 返回 true 表示验证通过,触发 onComplete
// 返回 false 表示还需等待
return !document.querySelector(".stop-button");
},
});
monitor.start(); // 开始监控
monitor.stop(); // 停止监控
monitor.isIdle(); // 是否空闲
monitor.getActiveCount(); // 活跃请求数
monitor.destroy(); // 销毁实例
算法说明: