Chrome扩展在service worker重新启动后未接收事件

nszi6y05  于 2023-05-11  发布在  Go
关注(0)|答案(1)|浏览(118)

我正在为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。我订阅了这两个,我的问题是服务工作者被唤醒并运行,但它的事件没有触发。

6psbrbz9

6psbrbz91#

这是服务人员的已知问题。我们已经有了introduced improvements,并将继续这样做。截至目前(2023年5月10日):

  • 所有扩展事件和API调用都将延长service worker的生存期。
  • 选定的用例(如本机消息传递)将使扩展服务工作者的活动时间超过5分钟。

相关问题