Прогресс кэша сервисного работника

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

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

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

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

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

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

  3. а также говорит, что ваша фактическая емкость кеша равна "это", а после загрузки оставленное содержимое "это"?

0 ответов

Вам необходимо добавить client.postMessage() для работника службы по событию 'activ' (которое происходит после завершения кэширования) и навигатор.serviceWorker.addEventListener('message') Fn на страницу содержимого index.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() передает сообщение всем, находящимся под контролем работника сервиса, что вам может не понадобиться.

Другие вопросы по тегам