我正在开发一个 chrome 扩展,其中服务工作人员完成所有繁重的工作(功能、身份验证等),弹出窗口处理 UI。它基本上是这样工作的:弹出脚本(popup.js)向软件发送一条消息,并根据响应显示不同的屏幕(界面)。本质上,软件监听两件事:消息和/或网络请求。软件代码如下:
(async () => {
//put id here
id = await chrome.storage.sync.get("myID");
chrome.webRequest.onHeadersReceived.addListener(callback, filter, []);
//accept message from popup asking for login status
chrome.runtime.onMessage.addListener((req, _, sendResponse) => { ...
})
// accepts message from popup for other functionality
chrome.runtime.onMessage.addListener((req, _, sendResponse) => { ...
});
})();
当没有足够快地触发侦听器的处理程序并且软件变为非活动状态时,出现问题。当弹出窗口最终打开时,软件工作人员仍然处于非活动状态,并且没有人监听来自弹出窗口的消息。有没有办法重新激活软件并检查它当前是否处于活动状态。
我正在考虑创建一个持久的服务工作者,但这不是必需的,因为我只需要它在打开弹出窗口时处于活动状态。这将是我最后的手段。
我无法选择 woxxom 的答案作为答案,但删除等待解决了问题,即使服务工作者进入睡眠状态,它也会在收到消息时醒来。以下是 chrome 扩展文档中有关 Service Worker 生命周期的更多信息。