我想在fetch事件监听器中访问我的服务工作者的范围。我计划的解决方法是使用window.location.host
,但window
在服务工作者内部不可用。我也尝试使用ServiceWorkerRegistration.scope(MDN doc),它会返回我想要的值,但这也不能在fetch事件处理程序中访问。
我希望有类似event.scope
的内容(在注册处理程序中可用),但是对于获取处理程序。这可能吗?
答案 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;
这会将指定的范围返回给服务工作者。我必须在服务人员中处理此问题,因为我们在同一站点上有多个应用程序,它们可能会使用或不使用服务工作人员-取决于开发人员的意愿。