Я пытаюсь заставить ServiceWorker
работать из подкаталога webroot с именем appdashboard
... сервисная программа устанавливает, запускает и видна из chrome://serviceworker-internals/
, но его Navigator.serviceWorker.controller
пусто, поэтому я не могу связаться с этим. Если я не ограничиваю область действия (и не переношу свой файл работника службы поддержки в webroot), он будет работать нормально.
const serviceWorker = navigator
.serviceWorker
.register('appdashboard/dashboard_serviceworker.js', { scope: 'http://localhost/appdashboard/' })
.then((swReg) => {
console.log('[Service Worker (Dashboard)] service worker is registered', swReg);
swRegistration = swReg;
if (navigator.serviceWorker.controller != null) {
console.log("controller is working")
}
if (navigator.serviceWorker.controller == null) {
console.log("controller is NULL!") // <<<< its null :(
}
})
Я максимально упростил serviceworker
, чтобы диагностировать проблему, и контроллер обнуляется даже с этим рабочим
self.addEventListener('message', function (event) {
console.log('got message')
});
self.addEventListener('activate', function (event) {
console.log('serviceworker activate')
event.waitUntil(self.clients.claim()); // Become available to all pages
});
self.addEventListener('install', function (event) {
console.log('install')
});
self.addEventListener('fetch', function (event) {
console.log('fetch')
});
self.addEventListener('push', (event) => {
console.log('received push')
});
self.addEventListener('notificationclick', function (event) {
console.log('registered notification click!')
});