прогресс кэша сервисного работника - PullRequest
0 голосов
/ 13 декабря 2018

Я новичок в Java-скрипте, а также в PWA.

Я пытаюсь загрузить все свое содержимое images/css/audio/video/.html в кеш, используя API кеша, что я успешно использовал, используя https://developers.google.com и другие ресурсы.

Мой вопрос теперь таков:
Вскоре содержимое загружается в кэш, SW (работник службы) должен сообщить, что все содержимое загружено.Я попытался перебрать статическое содержимое, которое я хочу кэшировать, и попытался использовать alert, но там написано

Uncaught (в обещании) ReferenceError: alert не определено

  1. Как SW сообщит главной странице (скажем, index.html), что содержимое было кэшировано без нажатия какой-либо кнопки или взаимодействия?

  2. А если есть возможность индикатора выполнения, который может показать ход загрузки содержимого в кеш?

  3. , а также указание фактической емкости кеша «this» и после загрузки оставленного содержимого «this» ?

1 Ответ

0 голосов
/ 23 мая 2019

Вам необходимо добавить client.postMessage () для работника службы в случае события 'activ' (которое происходит после завершения кэширования) и navigator.serviceWorker.addEventListener ('message') Fn в индекс страницы контента.html или что-то еще.

Вот код, который я использую:

// activate with notification TO DOM (!)
global.addEventListener('activate', event => {
  event.waitUntil(async function() {
    await global.clients.claim();
    delay(5000).then(() => {
      data = 'activated';
      console.log('activate msg => dom: ' + data);
      global.clients.matchAll().then(all => all.map(client => client.postMessage(data)));
    });
  }());
});

и на скрипте страницы содержимого:

navigator.serviceWorker.addEventListener('message', function(event) {
  console.log('sw message: ' + event.data);
  if ( event.data === 'activated' ) {
    somefunctions();
  }
});

Примечание: global.clients.matchAll () передает сообщениеко всему, что находится под контролем работника службы, чего вы, возможно, не хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...