冲突的服务工作者范围(更广泛和更窄)

时间:2017-11-06 13:13:11

标签: service-worker

假设我们说我们有控制主页的sw1.js

  

sw.js ==>范围是“/”

现在我们有另一个服务工作者sw2.js来控制产品页面

  

sw2.js ==>范围是“/ product”

当我们访问主页后跟产品页面时,安装并激活了两个服务工作者。

问题是: 当我们在产品页面(sw2.js)时,主页服务工作者(sw1.js)会干扰吗?

(理想情况下,两个服务工作者(sw1.js,sw2.js)控制页面,但sw2.js的范围更窄,与产品匹配的范围比主页范围更广的主页服务工作者sw1.js更多

2 个答案:

答案 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 /)