我正在为MV3编写一个Chrome扩展程序,遇到了一个问题,我的扩展程序在一段时间后停止工作。
在手动重新启动我的扩展(以及它的service worker)之后,一切都正常。但是,在20分钟之后,我的扩展停止接收我添加了侦听器的任何事件。我必须手动重新启动扩展或chrome://serviceworker-internals/?devtools
上的service worker。
这似乎是因为 chrome 停止,然后重新运行我的服务工人后,一段时间。问题是这种形式的重新运行使我的service worker没有接收到任何事件。
下面是一些重现该问题的最小代码:
console.log("Main");
chrome.webRequest.onBeforeRedirect.addListener(
async (details) => {
console.debug(details);
},
{ urls: ["https://*/*"] }
);
chrome.webRequest.onBeforeRequest.addListener(
async (details) => {
console.debug(details);
},
{ urls: ["https://*/*"] },
["requestBody"]
);
chrome.tabs.onUpdated.addListener(
(tabId, changeInfo, tab) => {
console.debug(changeInfo);
}
);
chrome.webNavigation.onDOMContentLoaded.addListener(
(details) => {
console.debug(details);
}
);
当我手动重新启动时,我得到了“Main”日志和所有预期的调试对象。当我注意到我的扩展停止工作并检查service worker的日志时,因为它已经重新运行,控制台日志已经被清除,但我看到的唯一日志是“Main”,这意味着我的侦听器都被重新读取了。但没有接收到任何事件,也没有记录调试日志。在手动重新启动时,我会像预期的那样再次获得“Main”日志和所有调试对象,直到下一次中断。
我看过this SO answer,它说如果webRequest不起作用,一个解决方案是订阅webNavigation。我订阅了这两个,我的问题是服务工作者被唤醒并运行,但它的事件没有触发。
1条答案
按热度按时间6psbrbz91#
这是服务人员的已知问题。我们已经有了introduced improvements,并将继续这样做。截至目前(2023年5月10日):