我已经检查了推送通知的网页,并已运行到下面的代码片段当有多个服务人员时,Navigator.serviceWorker如何解决?
如果有多个服务人员这是如何化解?它是否返回最后注册的服务工作者?
这个文档对我来说并不是很清楚。
我已经检查了推送通知的网页,并已运行到下面的代码片段当有多个服务人员时,Navigator.serviceWorker如何解决?
如果有多个服务人员这是如何化解?它是否返回最后注册的服务工作者?
这个文档对我来说并不是很清楚。
杰克阿奇博尔德的“The Service Worker Lifecycle”是一个很好的资源,如果你还没有阅读它,我建议你这样做。
每位服务人员都有自己的scope。默认情况下,该范围与服务工作者脚本所服务的目录是相同的目录。如果需要,当您致电navigator.serviceWorker.register()
时,您可以通过更严格的范围。
对于给定的来源,可以注册具有不同范围的多个服务工作人员。 (旁白:如果你尝试用相同范围为给定的原产地注册多个服务人员,即使服务人员have different URLs,随后的记录将被类似服务工作者updates,而不是单独的注册处理。)
如果注册了多个服务工作人员,那么为了确定哪一个人员控制给定客户端页面,将检查范围。服务人员whose registered scope is most specific,即最长的匹配范围,是控制给定客户页面的范围。
因此,举例来说,给定以下两个服务人员登记与对应的范围:
/path/to/sw.js
,具有范围注册/path/to/
/path/to/subdir/sw.js
,具有范围注册/path/to/subdir/
如果客户端页面的URL是/path/to/index.html
,那么SW 1将控制客户端,因为/path/to/
是最长的匹配项范围。
如果客户端页面的URL是/path/to/subdir/index.html
,那么SW 2将控制客户端。即使SW 1的范围相匹配,SW 2的范围也相同,SW 2的范围更具体/更长。