获取服务工作者范围在fetch事件侦听器中

时间:2017-11-06 19:18:02

标签: javascript service-worker progressive-web-apps service-worker-events

我想在fetch事件监听器中访问我的服务工作者的范围。我计划的解决方法是使用window.location.host,但window在服务工作者内部不可用。我也尝试使用ServiceWorkerRegistration.scope(MDN doc),它会返回我想要的值,但这也不能在fetch事件处理程序中访问。

我希望有类似event.scope的内容(在注册处理程序中可用),但是对于获取处理程序。这可能吗?

2 个答案:

答案 0 :(得分:3)

在Chrome开发工具中进行了一些挖掘之后,我找到了我正在寻找的变量:self.location.host。这引用了ServiceWorkerGlobalScope,它具有“location”属性。

我在Google Chrome小组example service worker中使用self.location.origin找到了类似的用法:

// Skip cross-origin requests, like those for Google Analytics.
  if (event.request.url.startsWith(self.location.origin)) { ... }

答案 1 :(得分:0)

我不知道规范是否比这篇文章更新,但是获取服务人员范围的实际方法是使用:

let scope = self.registration.scope; 

这会将指定的范围返回给服务工作者。我必须在服务人员中处理此问题,因为我们在同一站点上有多个应用程序,它们可能会使用或不使用服务工作人员-取决于开发人员的意愿。