Navigator.serviceWorker.controller работает только в webroot - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь заставить 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!')
});

1 Ответ

0 голосов
/ 11 сентября 2018

Я использовал MVC маршрутизацию, так что мой URL-путь был localhost/dashboard, но моя файловая структура была /appdashboard/, теперь я обслуживаю index.html из /appdashboard/ webroot и инициализирует контроллер.

Эта строка указывает мне правильный путь.

Помните, что при включении область использует местоположение страницы в качестве своей базы.В качестве альтернативы, если этот код был включен на странице example.com/product/description.html, область действия «./» будет означать, что работник службы применяется только к ресурсам в example.com/product.

* 1011.*
...