Avi*_*oof 6 javascript web-worker offline-caching service-worker
我正在使用 React+Service Worker+离线插件来创建一个具有网站持久缓存的 Service Worker。
我想告诉用户何时缓存中存储了新版本并建议刷新页面,但我不知道如何引用 Service Worker 以及我应该监听什么事件(Service Worker 是由 npm“offline-plugin”自动创建的) )。
今天的标准流程:
新流程应该是:
Service Worker 是 WebWorker 的一种特殊形式。
当您注册一个软件时(例如在 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();
}
});
Run Code Online (Sandbox Code Playgroud)
现在离线插件的问题是它为您创建了软件,这样就更难理解软件在做什么。
我想说,最好创建自己的软件,这样您可以更好地理解功能。这个插件可以帮助你处理缓存。
归档时间: |
|
查看次数: |
6233 次 |
最近记录: |