我正在尝试理解Service Worker API,并且我知道有关注册Service Worker的各个部分。
根据API文档所述,如果找到服务工作者更新,则会将服务工作者注册并添加到队列中。仅当页面关闭并再次打开时,此SW才接管页面。也就是说,窗口被关闭并重新打开。
现在,这有一些缺点:
1. 用户可能会看到先前版本,其中可能存在非常严重的语法错误或其他问题。 2. 需要以某种方式通知用户内容已更改,刷新即可。
我知道如何告诉SW.js跳过等待(skipWaiting())并接管它。我也知道如何向SW.js发送消息,告诉它用户想要自动刷新。
但是,我不知道如何知道新的SW是否实际处于等待状态。
我已经使用了这个:
根据API文档所述,如果找到服务工作者更新,则会将服务工作者注册并添加到队列中。仅当页面关闭并再次打开时,此SW才接管页面。也就是说,窗口被关闭并重新打开。
现在,这有一些缺点:
1. 用户可能会看到先前版本,其中可能存在非常严重的语法错误或其他问题。 2. 需要以某种方式通知用户内容已更改,刷新即可。
我知道如何告诉SW.js跳过等待(skipWaiting())并接管它。我也知道如何向SW.js发送消息,告诉它用户想要自动刷新。
但是,我不知道如何知道新的SW是否实际处于等待状态。
我已经使用了这个:
navigator.serviceWorker.ready.then((a) => {
console.log("Response, ", a);
if (a.waiting !== null && a.waiting.state === "installed") {
console.log("okay");
}
});
然而,通常它会返回等待状态作为null
。(可能是因为当请求被触发时软件仍在安装中。)
我如何在客户端页面上知道可用的等待服务工作者?
updatedSW
是在哪里定义的? - Zephyr was a Friend of Mineevent.target
。 - Jeff Posnick