服务人员是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的结果,你可以显示警报点击警报重新加载页面 –
您好,我已经更新了描述。 –