Нужна информация об использовании мультисервисного работника в домене - PullRequest
0 голосов
/ 18 мая 2019

У меня есть веб-сайт PWA и есть собственный файл service-worker.js для кэширования. По некоторым причинам я хочу использовать службу push-уведомлений на своем веб-сайте. Я должен знать ответы на эти вопросы:

1) Как я могу использовать мультисервисных работников в корневом каталоге сайта?

2) Могу ли я использовать один файл работника службы и поместить в него два importscript из двух работников службы?

3) Могу ли я использовать поддельную область для регистрации работника службы? (Я имею в виду использовать область, и это не в моем пути к веб-сайту.)

4) Если я использую importscript, доступно ли кэширование для моих старых пользователей?

Я попытался использовать одного работника службы в корневом каталоге веб-сайта и использовать importscript в этот файл работника службы, например:

importScripts('https://cdn.onesignal.com/sdks/OneSignalSDKWorker.js');
importScripts('service-worker.js');

У меня есть push-уведомление, и все в порядке, но я не знаю, что мой старый кэшированный файл пользователя все еще доступен?

Кроме того, я попытался использовать регистр для регистрации обоих с областью, но navigator.serviceWorker.ready (promise) для подписки всегда в pending:

navigator.serviceWorker.register('/service-worker.js', {scope: '/fake'})
        .then((registration) => {
          console.log('ServiceWorker registration successful.', registration)
          return navigator.serviceWorker.ready
        })
        .catch(error => {
          console.error('ServiceWorker registration failed.', error)
        })
console:

navigator.serviceWorker.ready = Promise {<pending>}
__proto__: Promise
[[PromiseStatus]]: "pending"
[[PromiseValue]]: undefined

1 Ответ

1 голос
/ 21 мая 2019

Я постараюсь ответить на ваш вопрос:

1) Как я могу использовать мультисервисных работников в корневом каталоге сайта?

Вы можете иметь только одного сервисного работника, зарегистрированного по сайту в указанной области: так, только один в / области, но вы можете добавить сервисного работника в каждую область на вашем сайте (то есть: один на / и один на /user) Но вы можете объединить 2 работника сервиса в одного, если вам это нужно.

2) Могу ли я использовать один файл сервисного работника и поместить в него два сценария импорта двух сервисных работников?

Да, вы можете сделать это, вы можете поместить любое количество eventListener, которое вам нужно, они выполняются в порядке декларации, но будьте осторожны, если только require в javascript, все сценарии импорта с importScripts() не имеют одинаковую область видимости, поэтому у них могут быть некоторые проблемы, если отдельный скрипт имеет какое-либо имя переменной.

3) Могу ли я использовать поддельную область для регистрации работника службы? (Я имею в виду использовать область видимости, и она не указана в пути моего сайта.)

Можно, но область действия ПО определяет его контекст выполнения, поэтому он будет загружен на ваш компьютер / телефон, но он будет эффективен только по запросу в своей области, если вы находитесь на странице под ним (website.com/fake или website.com/fake/whateverelse) или если вы вызываете ресурс в этой области (website.com/fake/style.css)

4) Если я использую importcript, доступно ли кэширование для моих старых пользователей?

Это зависит от того, что вы делаете в фазе install и activate. Установка нового ПО или его новой версии не очистит кеш, если вы явно не сделаете это в своем коде.

...