MV3浏览器扩展:如何阻止后台Worker因标签页移除被唤醒?
MV3扩展Service Worker事件唤醒问题(以
chrome.tabs.onRemoved为例) 我正在开发基于Manifest V3的浏览器扩展,这里以后台Service Worker和chrome.tabs.onRemoved事件为例,该问题也可能适用于其他Chrome API事件类型。
问题流程
- Worker调用
chrome.tabs.onRemoved.addListener(onRemoved)注册监听器 - Worker因闲置停止运行
- Worker再次被唤醒启动,但此时之前注册的
onRemoved监听器引用已随Worker停止被清除,调用chrome.tabs.onRemoved.removeListener(onRemoved)无法找到对应监听器完成移除 - 本次Worker启动后,不再调用
chrome.tabs.onRemoved.addListener(onRemoved)添加新的监听器
测试现象
经过测试发现:一旦后台Service Worker调用过chrome.tabs.onRemoved.addListener(onRemoved),后续每次移除标签页时,Chrome都会唤醒后台Worker。即便Worker按设计频繁启停,也无法阻止这种唤醒行为——因为无法访问第一次注册的监听器实例来执行移除操作。虽然Worker重启后没有添加新监听器,不会执行标签页移除的处理逻辑,但每次移除标签页仍会触发后台线程唤醒。
核心疑问
是否存在可行方法,能在后台Service Worker调用过chrome.tabs.onRemoved.addListener(onRemoved)并停止后,阻止Chrome因标签页移除事件唤醒后台线程?
内容的提问来源于stack exchange,提问作者Garret Wilson
相关产品推荐
相关产品推荐

