服務人員是webworker的一種特殊形式。
當您在註冊表中使用sw時,例如在serviceWorkerRegistry.js中,您將可以訪問多個事件。
例如
serviceWorkerRegistry.js:
if (!navigator.serviceWorker) return;
navigator.serviceWorker.register('/sw.js').then(function(reg) {
if (!navigator.serviceWorker.controller) {
return;
}
if (reg.waiting) {
console.log("inside reg.waiting");
return;
}
if (reg.installing) {
console.log("inside reg.installing");
return;
}
reg.addEventListener('updatefound', function() {
console.log("inside updatefound");
let worker = reg.installing;
worker.addEventListener('statechange', function() {
if (worker.state == 'installed') {
console.log('Is installed');
// Here you can notify the user, that a new version exist.
// Show a toast view, asking the user to upgrade.
// The user accepts.
// Send a message to the sw, to skip wating.
worker.postMessage({action: 'skipWaiting'});
}
});
});
});
sw.js:
// You need to listen for a messages
self.addEventListener('message', function(event) {
if (event.data.action === 'skipWaiting') {
self.skipWaiting();
}
});
現在還有離線插件的問題,是它創造了SW你,並以這種方式是很難明白什麼SW在做什麼。
我會說,最好是創建自己的sw,這樣你可以更好地理解功能。 this插件可以幫助您緩存。
沒有足夠的細節。順便說一下,你可以使用onmessage事件,當你有webworker的結果,你可以顯示警報點擊警報重新加載頁面 –
您好,我已經更新了描述。 –