【问题标题】:Getting service worker scope inside fetch event listener在 fetch 事件侦听器中获取服务工作人员范围
【发布时间】:2017-11-06 19:18:01
【问题描述】:
我想在 fetch 事件监听器中访问我的 service worker 的作用域。我计划的解决方法是使用window.location.host,但window 在服务人员内部不可用。我还尝试使用 ServiceWorkerRegistration.scope (MDN doc),它会返回我想要的值,但这在 fetch 事件处理程序中也无法访问。
我希望有类似于event.scope 的东西(在注册处理程序中可用),但用于获取处理程序。这可能吗?
【问题讨论】:
标签:
javascript
service-worker
progressive-web-apps
service-worker-events
【解决方案1】:
在浏览了一些 Chrome 开发工具后,我找到了我正在寻找的变量:self.location.host。这引用了具有“位置”属性的 ServiceWorkerGlobalScope。
我在 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)) { ... }
【解决方案2】:
我不知道规范是否比这篇文章更新,但获取服务工作者范围的实际方法是使用:
let scope = self.registration.scope;
这会将指定的范围返回给服务人员。我不得不在我的服务工作者中处理这个问题,因为我们在同一个站点上有多个应用程序可能会使用或不使用服务工作者 - 取决于开发人员的意愿。