
浏览器资源嗅探扩展为什么会被后台休眠杀掉Cat-Catch 的三个平台级解法【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catchCat-Catch 是一个浏览器资源嗅探扩展已整体迁到 Manifest V3。本文按问题顺序看它怎么处理 Service Worker 休眠、存储 IO 和 Firefox 兼容这三件平台级难事以及每个方案的落点和代价。心跳间隔为什么定在 4 分 10 秒Service Worker 能活多久Manifest V3 的后台是 Service Worker浏览器会在它空闲 5 分钟后直接终止进程。对一个嗅探扩展来说这等于后台随时会断电正在缓冲的资源列表、未完成的下载状态都会随进程消失。Cat-Catch 在 1.0.24 就加了 Heart Beat2.0.0 版本说明里写得很直白——后台被杀死后要能立刻唤醒自己。做法是让内容脚本在页面里维持一条 Port 连接。页面只要开着这条连接就不断给后台续命。核心逻辑在 js/background.js 开头几十行简化后是这样chrome.runtime.onConnect.addListener(function (Port) { if (chrome.runtime.lastError || Port.name ! HeartBeat) return; Port.postMessage(HeartBeat); const interval setInterval(function () { clearInterval(interval); Port.disconnect(); // 4 分 10 秒后主动断开等下一次重连 }, 250000); });250000 毫秒是 4 分 10 秒比 5 分钟休眠窗口短 50 秒。到期后扩展主动断开 Port由内容脚本重新发起连接相当于在浏览器动手之前自己把心跳续了一次。断连回调里还会清掉定时器避免页面关闭后留下悬挂的 interval。两条补充的续命路径光有 Port 还不够。同一文件里还有一行setInterval(chrome.runtime.getPlatformInfo, 25 * 1000)每 25 秒调用一次无害的 runtime API用来应对 Port 短暂缺席的情况popup 页面打开时也会发一条 HeartBeat 消息给后台js/popup.js。多标签页场景下任一活跃页面都能维持后台存活。对开发者的参考如果你的扩展也依赖长期后台状态5 分钟窗口 − 固定安全余量是一个可以直接套用的定参方法比追求常驻进程更稳。运行数据换用 storage.session 算的是哪笔账高频写 local 出过什么问题嗅探扩展的写入模式和普通工具类扩展完全不同每捕获一个资源就要动一次存储一个页面几十秒内可能触发上百次。2.5.3 之前这些运行时数据存在storage.local走磁盘持久化路径写多了就出现 IO 报错严重到扩展直接不可用的地步。2.5.3 把嗅探缓存整体挪到storage.session版本说明里明确写着目的减少 IO 错误导致扩展无法使用前提是 Chrome 104 以上。session 存储走内存会话结束即清空——恰好匹配资源列表只对本次浏览会话有意义的语义用户配置仍留在 local。9999 条上限内存的最后防线换存储解决不了另一件事数据本身会膨胀。js/background.js 里给每个标签页设了长度阈值超限就整页清空缓存js/init.js 中这个阈值按端型区分移动端是 999桌面端是 99992.5.9 版本引入的每页上限。配套的查重也做了成本控制URL 指纹只维护最近 500 条超过就整体清掉重来popup 页面在 500 条以上也允许中断加载。对开发者的参考运行时缓存与会话同寿命、配置与浏览器同寿命是比全部持久化更省事的分层给每类数据配一个硬上限比事后做清理逻辑可靠。Firefox 线是怎么并行维护的一份代码两份声明仓库里同时存在manifest.json和manifest.firefox.jsonFirefox 侧另配 js/polyfill.js 兼容层。js/background.js 的头部注释写明了加载模型差异Chrome 走 V3 的 service_workerFirefox 走 background.scripts脚本在初始化时先判断是否已加载避免重复注入。时间线上1.0.24 加入 firefox.js 兼容层并上架 Firefox2.4.6 把版本要求提到 1132.5.7 完成 Firefox 侧的 Manifest V3 升级且脚本注入类功能要求 128 以上。差异落在哪几个点上能力Chrome / EdgeFirefox猫抓的落点Manifest V3支持128 起支持双 manifest 构建storage.session支持不支持运行时回退 localsidePanel支持不支持该入口直接隐藏declarativeNetRequest支持支持按条件启用WebRTC 录制支持受限支持功能降级代码里的回退写法很统一chrome.storage.session ?? chrome.storage.localFirefox 或旧版本 Chromium 自动落到 local。侧边栏是 Chromium 独占能力2.6.2 新增选项时注明不支持 Firefox2.6.3 还专门修了 Chromium 114 以下缺 sidePanel API 导致扩展起不来的问题。对开发者的参考双 manifest 薄兼容层比在代码里到处if (isFirefox)便宜得多前提是接受部分入口按引擎隐藏而不是为 Firefox 造一套替代品。 把 m3u8 解析链路修到能应付真实世界的流嗅探只解决看见能不能下载下来取决于解析链路。这条链路的几个关键动作都有明确的版本记录2.0.0支持 N_m3u8DL-CLI 的m3u8dl://协议m3u8 解析器开始支持在线合并下载2.2.2解析器改用 hls.js同时把下载器和解析器拆成两个页面2.4.7js/m3u8.js 的并发上限调整为 6 条线程并支持自定义请求头同版本加入 Aria2 RPC 下载2.5.7疑似密钥增加验证功能m3u8dl://和调用本地程序都加了下发前确认参数2.6.2 / 2.6.8录制失败重试、文件大小估算、HEVC/H265 预览再到 EXT-X-BYTERANGE 标签的合并下载、任意切片勾选合并、嵌套在线 ffmpeg不再单独开新标签2.7.1下载出错自动重试。6 线程不是拍脑袋的数字而是 2.4.7 在重写下载器后的压线值再高容易触发站点限流再低拖长直播录制的追赶时间。对开发者的参考m3u8 场景的坑大多是真实世界的——一次性 URL、加密密钥、BYTERANGE 分片、断流。按问题逐个打补丁、每个补丁带版本号比一次性重写下载器更容易被社区验证。两道安全阀内容净化与屏蔽列表Trusted Types 的降级写法2.2.0 引入 Trusted Types 后catch-script/catch.js 里的initTrustedTypes()先尝试探测页面 CSP 若已开启 Trusted Types就注册一个名为catCatchPolicy的策略来放行createHTML探测失败则回退到普通字符串并打一条 warn。注入脚本里大量用 innerHTML 拼装资源条目这类页面在严格 CSP 站点上容易被拦提前注册策略比被拦了再修省事。屏蔽列表黑名单、白名单和一个总开关2.5.9 加入屏蔽网址功能默认黑名单模式把不希望扩展运行的站点加进去也可以翻成白名单只有列出的站点才启用嗅探。2.6.5 又加了一层全局强制屏蔽对应部分网站不希望被本扩展抓取的场景用户无法覆盖。两层开关叠加后隐私和误触都归用户控制站点意愿归强制列表控制互不越界。对开发者的参考嗅探类扩展天然会多管闲事给最终用户一个可逆的退出路径黑名单/白名单同时给站点方一个不可逆的总闸是比事后删数据更好的处理顺序。【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考