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
相关产品推荐
相关产品推荐

