下图显示安装了两个工作器 - 一个处于活动状态,另一个未处于活动状态(刚刚安装)。
- 注册一个服务工作者
- 更改
service-worker.js
并重新加载页面。 - 逻辑是服务工作者检查二进制差异并更新工作者的版本。
因此,一个新的 service worker 产生了一个新的版本 ID。但是为什么旧的一直在运行?以及如何关闭它?
这里sw.js
是https://gist.github.com/boopathi/57b7e8b6d657d55bdc7d
下图显示安装了两个工作器 - 一个处于活动状态,另一个未处于活动状态(刚刚安装)。
service-worker.js
并重新加载页面。因此,一个新的 service worker 产生了一个新的版本 ID。但是为什么旧的一直在运行?以及如何关闭它?
这里sw.js
是https://gist.github.com/boopathi/57b7e8b6d657d55bdc7d
默认情况下,在关闭/卸载由旧服务工作者控制的页面的所有选项卡之前,旧服务工作者将保持运行。新的 Service Worker 将在“等待”状态下“等待”。
有一些选项可以更改此默认行为。他们是skipWaiting()
和clients.claim()
。
当skipWaiting()
从安装服务工作者调用时,它将跳过“等待”状态并立即激活。然而,尽管被激活,它不一定会控制页面——这就是clients.claim()
将要完成的事情。