我正在尝试了解 Service Worker API,并且我知道有关注册 Service Worker 的点点滴滴。
如 API 文档中所述,如果发现 Service Worker 更新,则注册 Service Worker 并将其添加到队列中。当且仅当页面被关闭并再次打开时,此 SW 才会接管页面。即,窗口被关闭并再次重新打开。
现在,这有一些缺点:
用户可能会看到以前的版本可能有非常严重的语法错误,或者其他什么。
需要以某种方式通知用户内容已更改并且引用会执行此操作。
我知道如何告诉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
。(可能是因为触发请求时 SW 仍在安装。)
我如何在客户端页面上知道等待的服务人员可用?