在获取事件侦听器中获取服务工作者范围
Getting service worker scope inside fetch event listener
我想在获取事件侦听器中访问我的服务工作者的范围。我计划的解决方法是使用 window.location.host
,但 window
在 service worker 中不可用。我还尝试使用 ServiceWorkerRegistration.scope (MDN doc),这将 return 我想要的值,但这在 fetch 事件处理程序中也是不可访问的。
我希望有类似于 event.scope
的东西(在注册处理程序中可用),但用于获取处理程序。这可能吗?
在 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)) { ... }
我不知道规范是否比这个更新post,但获取服务工作者范围的实际方法是使用:
let scope = self.registration.scope;
这将 return 指定给 service worker 的范围。我必须在我的 service worker 中处理这个问题,因为我们在同一站点上有多个应用程序可能会使用或不使用 serviceworker - 取决于开发人员的意愿。
我想在获取事件侦听器中访问我的服务工作者的范围。我计划的解决方法是使用 window.location.host
,但 window
在 service worker 中不可用。我还尝试使用 ServiceWorkerRegistration.scope (MDN doc),这将 return 我想要的值,但这在 fetch 事件处理程序中也是不可访问的。
我希望有类似于 event.scope
的东西(在注册处理程序中可用),但用于获取处理程序。这可能吗?
在 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)) { ... }
我不知道规范是否比这个更新post,但获取服务工作者范围的实际方法是使用:
let scope = self.registration.scope;
这将 return 指定给 service worker 的范围。我必须在我的 service worker 中处理这个问题,因为我们在同一站点上有多个应用程序可能会使用或不使用 serviceworker - 取决于开发人员的意愿。