问题描述
我最近使用工作箱将网站变成了PWA,并添加到了我在Android设备上的主屏幕上。但是,当我更新网站时,PWA不会在android上更新。
{"short_name":"sspNG","name":"Security Shields PNG Limited","icons":[{"src":"/assets/img/fb-pro-pic0.png","type":"image/png","sizes":"512x512"},{"src":"/assets/img/fb-pro-pic0.png","sizes":"512x512"}],"start_url":"/index.html","background_color":"#fff","theme_color":"#fff","display":"standalone","orientation":"portrait"}
这是服务人员的注册码:
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load',() => {
navigator.serviceWorker.register('/sw.js')
.then(registration => {
console.log('Service Worker registered! ?');
})
.catch(err => {
console.log('Registration Failed ? ',err);
});
});
}
</script>
我正在寻找一种解决方案,用户无需手动清除浏览器应用程序存储中的缓存,并且PWA会自动更新。我想我使用了缓存后备方法,并且正在寻找一种替代方法,以强制更新现有PWA中的缓存。
解决方法
恐怕你把两件事混为一谈了:
-
manifest.json
仅包含对图标文件、start_url
和scope
的引用。 - 而
service-worker.js
应包含带有路径的数组,指向您的 PWA 的 HTML、CSS、JavaScript 和其他资产文件。此外,service-worker.js
还应为 PWA 安装、激活/删除和获取事件定义事件侦听器/处理程序。
最后,最终触发 PWA 自动更新的是explained here。