Сначала я отключаю свой сайт от сервисного работника. Я хочу предложить пользователю обновить страницу, когда будет доступно обновленное содержимое. Я хочу, чтобы пользователи знали, что они просматривают устаревшие материалы, чтобы они могли получать новейшее содержимое, обновляя страницу.
Эти реализации являются хорошим примером:
Демонстрация работника сервиса от Mozilla
Подход № 3 в этой статье .
Я использую сервис-кеша, предоставленный PWABuilder. Он работает хорошо, но не предлагает пользователю доступных обновлений.
Я пытался скопировать код из статей выше, но не смог заставить его работать.
Вот репо работника службы, которого я сейчас использую.
Код, который я пытаюсь добавить в сценарий рабочего сервиса:
addEventListener('message', messageEvent => {
if (messageEvent.data === 'skipWaiting') return skipWaiting();
});
Скрипт, который я пытаюсь добавить на веб-страницу:
/ reload once when the new Service Worker starts activating
var refreshing;
navigator.serviceWorker.addEventListener('controllerchange',
function() {
if (refreshing) return;
refreshing = true;
window.location.reload();
}
);
function promptUserToRefresh(reg) {
// this is just an example
// don't use window.confirm in real life; it's terrible
if (window.confirm("New version available! OK to refresh?")) {
reg.waiting.postMessage('skipWaiting');
}
}
listenForWaitingServiceWorker(reg, promptUserToRefresh);
Если я просто добавлю этот код к работнику сервиса и веб-странице с уважением, работник сервиса будет работать нормально. Но подсказка обновления не работает.
Я получаю эту ошибку в консоли:
Uncaught ReferenceError: reg is not defined
at (index):231