如何阻止年长的服务人员?

How to stop older service workers?

下图显示安装了两个 worker - 一个处于活动状态,另一个不处于活动状态(刚刚安装)。

  1. 注册服务工作者
  2. 更改 service-worker.js 并重新加载页面。
  3. 逻辑是服务工作者检查二进制差异并更新工作者的版本。

因此生成了一个新的服务工作者,并使用了新的版本 ID。但是为什么旧的保留 运行 ?以及如何关闭它?

sw.js在这里https://gist.github.com/boopathi/57b7e8b6d657d55bdc7d

默认情况下,直到所有具有由该旧服务人员控制的页面的选项卡 closed/unloaded,旧服务人员将保持 运行。新的 service worker 将 "wait" 处于 "waiting" 状态。

有一些选项可以更改此默认行为。他们是 skipWaiting() and clients.claim().

当从正在安装的 Service Worker 调用 skipWaiting() 时,它会跳过 "waiting" 状态并立即激活。然而,尽管被激活,它不一定会控制页面——这就是 clients.claim() 将要完成的。