URL-адреса страниц в области ServiceWorker


Как я могу получить URL-адрес страниц, которые регистрируют ServiceWorker в области ServiceWorker?

Главная.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);
});

Св.js

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

1 ответ:

Внутри работника сферы услуг, self.registration.scope даст вам соответствующий объем. Это доступно в Chrome 42+ (который только что стал стабильным релизом), поэтому он должен быть безопасным в использовании.

Я думаю, что вы также можете спросить о том, как получить ссылку a на все активные страницы, которые также контролирует работник службы? Если это так, то ответ заключается в использовании self.clients.matchAll() (также доступно в Chrome 42+), который вернет (потенциально пустой) массив WindowClient объекты, соответствующие каждой открытой, контролируемой странице. WindowClient предоставляет СВОЙСТВО url с соответствующим URL-адресом.