Прогресс кэша сервисного работника
Я новичок в сценарии Java, а также в PWA.
Я пытаюсь загрузить все свое содержимое images/css/audio/video/.html
в кеш, используя API кеша, что я успешно сделал с помощью https://developers.google.com/ и других ресурсов.
Мой вопрос сейчас:
Вскоре содержимое загружается в кэш, SW(работник службы) должен сообщить, что все содержимое загружено. Я попытался перебрать статическое содержимое, которое я хочу кэшировать, и попытался использовать оповещение, но оно говорит
Uncaught (в обещании) ReferenceError: предупреждение не определено
Как SW сказал бы главной странице (скажем, index.html), что содержимое было кэшировано без нажатия какой-либо кнопки или взаимодействия?
А если есть возможность индикатора выполнения, который может показать ход загрузки содержимого в кеш?
а также говорит, что ваша фактическая емкость кеша равна "это", а после загрузки оставленное содержимое "это"?
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() передает сообщение всем, находящимся под контролем работника сервиса, что вам может не понадобиться.