11

如何获取在 ServiceWorker 范围内注册 ServiceWorker 的页面的 URL?

main.js

console.log(window.location.pathname); // /user
navigator.serviceWorker.register('/app/sw.js',{scope : '/user'}).then(function(){
    console.log('Service Worker initialised');
}).catch(function(er){
    console.log('er.message);
});

sw.js

console.log(self.location.pathname); // /sw.js
// How can I get the `/user` URI?
4

2 回答 2

28

在服务工作者中,self.registration.scope将为您提供相关的范围。这在 Chrome 42+(刚刚成为稳定版本)中可用,因此使用起来应该是安全的。

您可能还会问如何获取对服务工作者控制的所有活动页面的引用?如果是这种情况,答案是使用self.clients.matchAll()(在 Chrome 42+ 中也可用),它将返回一个(可能为空的)WindowClient对象数组,对应于每个打开的受控页面。WindowClient公开url具有相应 URL 的属性。

于 2015-04-16T16:23:17.060 回答
0

关于可用数据的一些有用文档:

ServiceWorkerRegistration.scope 只读 返回服务工作者注册的唯一标识符。这必须与注册 ServiceWorker 的文档同源。

https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration

于 2021-12-28T08:25:40.037 回答