服务工作者:self.skipWaiting()和self.clients.claim()

时间:2018-03-26 00:58:17

标签: service-worker progressive-web-apps

要在安装服务工作者后立即激活它,我在安装监听器中使用self.skipWaiting()。要立即控制页面(不需要页面导航,例如页面加载),我使用self.clients.claim()。我明白做这些事情意味着:

  • 页面可以首先加载而不受服务工作者的控制,但在服务工作者的生命周期内由服务工作者接管。
  • 页面可以在Service Worker版本1的控制下开始,但在其生命周期内由版本2接管。

网上有各种关于做这些事情的警告,但我没有看到陷阱。也许一个潜在的问题是,如果受控页面在首次加载时与服务工作者进行一些初始握手或设置。当新的服务工作者在后台激活时,这显然会被遗漏,但即便如此,服务工作者也可以通过其控制页面通知他们这一变化。

在我看来,对于大多数情况下的大多数应用程序而言,通过同时使用self.skipWaiting()self.clients.claim()而不会有任何缺点会大大受益。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

self.skipWaiting()的陷阱在这里描述得非常好(感谢@RobertRowntree的链接):

https://redfin.engineering/how-to-fix-the-refresh-button-when-using-service-workers-a8e27af6df68

至于self.clients.claim(),我仍然没有看到一个引人注目的论据反对它,但当我这样做时,我会更新我的答案。