Почему прослушиватель сообщений не работает при первой загрузке страницы? - PullRequest
0 голосов
/ 10 октября 2019

Проблема в том, что если я открываю инкогнито окно chrome, updateLocalId () не запускается. Так что я думаю, что я не получаю события от sw.

Но если я перезагружаю страницу, все работает нормально.

if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/service-worker.js')
    .then((registration) => {
      console.info('[main] ServiceWorker registration successful: ', registration, ' ', '?');
    }, (err) => {
      console.error('[main] ServiceWorker registration failed: ?', err);
    });

  navigator.serviceWorker.addEventListener('message', async function (event) {
    self.updateLocalId(event.data);
  });
}

С ПО отправляю сообщение следующим образом:

function send_message_to_all_clients(msg) {
   self.clients.matchAll().then(clients => {
        clients.map(client => client.postMessage(msg))
   });
}

1 Ответ

1 голос
/ 10 октября 2019

Найденное решение здесь

"Страница контролируется работником службы при переходе к источнику, для которого зарегистрирован работник службы. Таким образом, загрузка исходной страницы, которая фактически инициализирует службурабочий сам не контролируется "

Обновлена ​​функция отправки сообщения с ПО:

function send_message_to_all_clients(msg) {
   self.clients.matchAll({includeUncontrolled: true, type: 'window'}).then(clients => {
   console.log('[sync] clients', clients);
     clients.map(client => client.postMessage(msg))});
}
...