我正在使用 ServiceWorker 来缓存一些资产,并且我想在所有文件都已成功缓存后让用户知道,以便他们知道内容可以脱机访问。什么时候是做这件事的合适时机?
我有几个console.log()
要了解事物的流程。这是我注册 ServiceWorker 的时刻:
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/serviceWorker.js')
.then(function(registration) {
console.log('* ServiceWorker registration successful');
})
.catch(function(err) {
console.log('* ServiceWorker registration failed: ', err);
});
}
在 ServiceWorker 内部:
self.addEventListener('install', function(event) {
console.log('* Installing Service Worker...');
event.waitUntil(
caches.open(cacheName).then(function(cache) {
console.log('* Opened cache');
return cache.addAll(filesToCache).then(function () {
console.log('* Files have been cached!');
});
})
);
});
控制台显示:
* Installing Service Worker...
* Opened cache
* ServiceWorker registration successful
* Files have been cached!
所以我认为触发此通知的正确时刻是 after .addAll()
,所以我认为它目前在哪里吐出“文件已被缓存!”?在 上执行此操作会很方便register()
,但第三条和最后一条日志消息之间似乎存在延迟。如果是这样,因为我们在 ServiceWorker 内部,postMessage()
向客户端发送此信息是否是最好的方式?
谢谢!