ServiceWorker 范围内的页面 URL

Page URLs in ServiceWorker scope

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

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?

在 service worker 中,self.registration.scope 会给你关联的范围。这在 Chrome 42+(刚刚成为稳定版本)中可用,因此应该可以安全使用。

认为您可能还会问如何获取对服务工作者控制的所有活动页面的引用?如果是这种情况,答案是使用 self.clients.matchAll() (also available in Chrome 42+), which will return a (potentially empty) array of WindowClient 个对象,对应于每个打开的受控页面。 WindowClient 公开一个 url 属性 和对应的 URL.

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

ServiceWorkerRegistration.scope Read only Returns a unique identifier for a service worker registration. This must be on the same origin as the document that registers the ServiceWorker.

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