7

下图显示安装了两个工作器 - 一个处于活动状态,另一个未处于活动状态(刚刚安装)。

两个正在运行的服务人员

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

因此,一个新的 service worker 产生了一个新的版本 ID。但是为什么旧的一直在运行?以及如何关闭它?

这里sw.jshttps://gist.github.com/boopathi/57b7e8b6d657d55bdc7d

4

1 回答 1

12

默认情况下,在关闭/卸载由旧服务工作者控制的页面的所有选项卡之前,旧服务工作者将保持运行。新的 Service Worker 将在“等待”状态下“等待”。

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

skipWaiting()从安装服务工作者调用时,它将跳过“等待”状态并立即激活。然而,尽管被激活,它不一定会控制页面——这就是clients.claim()将要完成的事情。

于 2015-01-21T21:57:43.317 回答