background-keep-alive

后台保活工具集:Web Worker 定时器、音频保活、网络请求监控

目前為 2025-12-16 提交的版本,檢視 最新版本

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.cn-greasyfork.org/scripts/559089/1714656/background-keep-alive.js

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

作者
urzeye
版本
1.0.0
建立日期
2025-12-16
更新日期
2025-12-16
尺寸
15.5 KB
授權條款
MIT

background-keep-alive.user.js

解决浏览器后台标签页节流问题的通用工具集,包含三大模块。

引入方式

// ==UserScript==
// @require      https://raw.githubusercontent.com/urzeye/tampermonkey-scripts/main/util/background-keep-alive.user.js
// ==/UserScript==

模块 1: BackgroundTimer

基于 Web Worker 的保活定时器,绑定后台环境下不被节流。

const timer = new BackgroundTimer(() => {
  console.log("心跳:", new Date().toTimeString());
}, 1000);

timer.start(); // 启动
timer.stop(); // 停止
timer.setInterval(2000); // 动态调整间隔
timer.isRunning(); // 获取状态
timer.destroy(); // 销毁实例

模块 2: AudioKeepAlive

使用静音音频对抗 Chrome 5 分钟强力休眠。

⚠️ 需要用户交互后才能启动(浏览器自动播放策略限制)

const audio = new AudioKeepAlive();

// 需要在用户交互后启动
document.addEventListener("click", () => audio.start(), { once: true });

audio.stop(); // 停止
audio.isActive(); // 获取状态
audio.destroy(); // 销毁实例

模块 3: NetworkMonitor

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(); // 销毁实例

算法说明

  1. 记录当前活跃请求数
  2. 每次请求开始/结束都重置静默计时器
  3. 活跃数为 0 + 静默期结束 + DOM 验证通过 → 触发 onComplete