У меня есть простой рабочий сервис с обновлением кнопки, когда новый сервисный рабочий находится в очереди. После обновления я хочу обновить страницу на контроллере, но ничего не происходит. В целом рабочий сервис обновляется в режиме реального времени, но после этого курса (https://www.udacity.com/course/offline-web-applications--ud899) они пытаются добавить это обновление по какой-либо причине.Обновить страницу на контроллере в обслуживающем работнике
В ЯШАХ:
const updateButton = document.querySelector('.js-update-btn')
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('sw.js')
.then(function (reg) {
if (!navigator.serviceWorker.controller) {
return
}
if (reg.waiting) {
updateReady(reg.waiting)
return
}
if (reg.installing) {
trackInstalling(reg.installing)
return
}
reg.addEventListener('updatefound', function() {
trackInstalling(reg.installing)
})
})
var refreshing
navigator.serviceWorker.addEventListener('controllerchange', function() {
if (refreshing) return
window.location.reload()
refreshing = true
})
}
function updateReady (worker) {
updateButton.disabled = false
updateButton.addEventListener('click', function() {
updateButton.disabled = true
worker.postMessage({action: 'skipWaiting'})
})
}
function trackInstalling (worker) {
worker.addEventListener('statechange', function() {
if (worker.state == 'installed') {
updateReady(worker)
}
})
}
В sw.js:
self.addEventListener('message', function (event) {
if (event.data.action == 'skipWaiting') {
self.skipWaiting()
}
})