You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Manifest V3下延迟注册的非阻塞chrome.webRequest监听器仍无法在Service Worker休眠时存活?

Chrome扩展webRequest监听器在Service Worker休眠后失效问题

上月有一项bug修复已推送至Chrome稳定版,理论上它允许Service Worker进入非活跃状态时延迟注册非阻塞的webRequest事件监听器,示例代码如下:

chrome.webRequest.onBeforeSendHeaders(myHandler);

/**
 * @arg {chrome.webRequest.WebRequestDetails} details 
 */
function myHandler(details)
{
    // processing request's details …
}

我开发的扩展会监听活动窗口所有标签页发送的请求,并依据特定规则识别目标请求。为避免不必要的资源消耗,扩展在弹窗中提供了启停按钮,点击按钮时会通过chrome.runtime.sendMessage向Service Worker发送信号,由后者附加/移除webRequest.onBeforeSendHeaders事件的处理函数。因此,监听器并非在Service Worker顶层注册,而是在消息响应处理函数内完成注册。简言之,请求监听器默认关闭,可按需启停。

目前该功能虽能运行,但仅能在触发启动信号后的前几秒(平均约10秒)内拦截请求。若再次点击启动按钮,情况依旧:监听器会被附加,新请求能被拦截,但仅持续几秒。而打开Service Worker调试面板(控制台)后,请求拦截不会中断,一切正常……

看起来一旦Service Worker进入非活跃状态,事件监听器就会被销毁;而打开调试面板时不会出现此问题,可能是因为调试面板会保持Service Worker处于活跃状态。

这项bug修复原本不是应该解决该问题吗?遗憾的是我想不到任何替代方案或变通方法。最近有其他开发者遇到过类似情况吗?


内容的提问来源于stack exchange,提问作者Stphane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:25:21