当有多个服务工作者时,Navigator.serviceWorker如何解决?

时间:2017-01-16 05:13:49

标签: javascript service-worker

我一直在检查网络的推送通知,并且已经遇到以下代码段

navigator.serviceWorker

如果有多个服务工作者,这如何解决?它是否返回最后一位注册的服务人员?

这篇文章对我来说并不是很清楚。

1 个答案:

答案 0 :(得分:7)

Jake Archibald" The Service Worker Lifecycle"是一个很棒的资源,如果你还没读过,我建议这样做。

每个服务工作者都有自己的scope。默认情况下,在最宽松的范围内,范围与提供服务工作者脚本的目录相同。如果需要,您可以在致电navigator.serviceWorker.register()时传递更具限制性的范围。

可以为给定来源注册具有不同范围的多个服务工作者。 (旁白:如果您尝试为给定来源注册具有相同范围的多个服务工作者,即使服务工作者have different URLs,后续注册也将被视为服务工作者{{3而不是单独的注册。)

如果注册了多个服务工作者,那么为了确定哪个服务工作者控制给予客户端页面,将检查范围。服务工作者updates,即最长的匹配范围,是控制给定客户端页面的范围。

因此,例如,给定以下两个具有相应范围的服务工作者注册:

  • SW 1:/path/to/sw.js,已在范围/path/to/
  • 中注册
  • SW 2:/path/to/subdir/sw.js,已在范围/path/to/subdir/
  • 中注册

如果客户端页面的网址为/path/to/index.html,则SW 1将控制客户端,因为/path/to/是最长的匹配范围。

如果客户端页面的网址为/path/to/subdir/index.html,则SW 2将控制客户端。即使SW 1的范围匹配,SW 2的范围也匹配,SW 2的范围更具体/更长。