1

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

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

4

2 回答 2

3

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

我在使用 self.location.origin的 Google Chrome 团队的示例服务工作者中发现了类似的用法:

// Skip cross-origin requests, like those for Google Analytics.
  if (event.request.url.startsWith(self.location.origin)) { ... }
于 2017-11-06T20:21:03.990 回答
1

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

let scope = self.registration.scope; 

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

于 2020-03-03T01:01:58.703 回答