Service Worker удаляется и не получает push-события даже после указания корневой области при регистрации - PullRequest
0 голосов
/ 01 марта 2019

Я регистрирую работника службы, используя заголовок Service-Worker-Allowed со значением '/' и указав область действия при регистрации.

Регистрация ПО:

navigator.serviceWorker.register ('/ myapp / js / serviceWorker.js', {scope: '/'})

^ Это успешно.

Обслуживание S / W:

res.setHeader ('Service-Worker-Allowed', '/');

Рабочий процесс выглядит примерно так: myapp не вызывается напрямую, а выполняется за кулисами, когда пользователь не видит фактический URL.

Пользователь переходит на

www.domain.com / otherapp? Callmyapp = true

и негласно myapp www.domain.com/myapp инициируется, когда я выполняю вышеуказанные регистрации скорневая область.

Когда пользователь перейдет на

www.domain.com / otherapp /thingelse & myapp = false

myapp isнедоступен для взаимодействия с пользователем.

Раньше (без использования корневой области видимости) сервисный работник получал избыточность, но теперь это не так.Однако он помечен как удаленный.

Я не получаю никакого события push после этого перенаправления.

serviceWorker.js

self.addEventListener("push", function (event) {
    console.log('sw push event');
    if (event.data) {
        const notificationData = JSON.parse(event.data.text());
        self.registration.showNotification(notificationData.title, notificationData);
    }
});

Из того, что я понимаю с областями действия, еслия регистрирую сервисного работника с корневой областью видимости, он все еще должен быть доступен для получения push-события и не помечен как удаленный.

Я вижу много постов вокруг сервисного работника и угловых, стоит упомянуть, что myapp является старой школой / ваниль / пыль JS, в то время как otherapp является угловым.

ОТВЕТ:

Проблема была в том, что другое приложение не подписалосьвсе работники сферы обслуживания.Только если бы я знал.: / Мне потребовалось некоторое время для отладки и вывода из журналов даже после явного кэширования файлов myApp.

1 Ответ

0 голосов
/ 07 марта 2019

Непонятно, что вы подразумеваете под «закулисным» или «недоступным пользователю для взаимодействия».Лучший способ получить помощь по этим видам проблем - создать уменьшенный пример, например, что-то, демонстрирующее ошибку со всеми ненужными материалами.

Я пытался воссоздать систему, о которой вы говоритеоколо.https://glitch.com/edit/#!/sw-scope-example?path=server.js:22:0.

Если вы посещаете https://sw -scope-example.glitch.me / install-service-worker / , он вызывает:

navigator.serviceWorker.register('/deep/path/to/sw.js', { scope: '/' });

Эта службаУ работника есть заголовок:

Service-Worker-Allowed: /

Служащий действительно прост:

addEventListener('fetch', (event) => {
  event.respondWith(new Response('This is a response from the service worker.'));
});

Он отлично регистрируется.Теперь, если вы посетите любой URL-адрес источника, такой как https://sw -scope-example.glitch.me / other-app / what , вы увидите ответ работника службы.

Это отлично работает, поэтому между вашим примером и моим есть некоторое ключевое отличие.Можете ли вы сделать ремикс на Glitch выше, чтобы он продемонстрировал проблему, с которой вы столкнулись?

...