假设我们说我们有控制主页的sw1.js
sw.js ==>范围是“/”
现在我们有另一个服务工作者sw2.js来控制产品页面
sw2.js ==>范围是“/ product”
当我们访问主页后跟产品页面时,安装并激活了两个服务工作者。
问题是: 当我们在产品页面(sw2.js)时,主页服务工作者(sw1.js)会干扰吗?
(理想情况下,两个服务工作者(sw1.js,sw2.js)控制页面,但sw2.js的范围更窄,与产品匹配的范围比主页范围更广的主页服务工作者sw1.js更多
答案 0 :(得分:2)
每个页面最多只能由一名服务人员控制。如果多个服务工作者注册了一个来源,并且他们的范围重叠,那么具有最长匹配范围(即最具体的范围匹配)的服务工作者将“赢得”#34;并且它将是那个控制页面。
我只想澄清一个问题:一旦服务工作者控制客户端页面,页面发出的所有HTTP请求都将触发控制服务的fetch
处理程序工人。如果没有fetch
处理程序,或者有fetch
处理程序,但它没有针对给定请求调用event.respondWith()
,那么请求将针对网络,好像没有服务工作者参与。该请求不将落入可能也已注册的任何其他服务工作者。只有一个服务工作者可以处理给定的请求。
(other response可能是由于从/product
到/product/
之类的HTTP重定向导致的行为,这使得它看起来像是同一个请求被处理了两次,它实际上是两个不同的HTTP请求。)
答案 1 :(得分:0)
我用Chrome 63.0.3239.2快速检查了它,我得到了以下结果:
/ =>由sw.js处理
/ product / =>由sw2.js处理
/ other =>由sw.js处理
对于/产品我有一个奇怪的行为: 首先sw.js处理请求,然后sw2.js也处理请求。
所以没有混淆的最安全的方法可能是使用带斜杠的产品网址(/ product /)