我正在构建一个ReactJs PWA,但在检测iOS上的更新时遇到了麻烦。
在Android上,一切工作正常,因此我想知道这是否与iOS对PWA的支持有关,或者我对Service Worker的实现不好。
到目前为止,这是我所做的:
构建过程和托管
我的应用程序是使用webpack构建的,并托管在AWS上。大多数文件(js / css)的名称均由其内容生成的哈希值构成。对于那些不是(应用清单,index.html,sw.js)的应用程序,我确保AWS为它们提供了一些Cache-Control标头,以防止任何缓存。一切都通过https提供。
服务人员
我尽可能简化了这一过程:除了为我的应用程序外壳程序添加precache之外,我没有添加任何缓存规则:
workbox.precaching.precacheAndRoute(self.__precacheManifest || []);
Run Code Online (Sandbox Code Playgroud)
服务人员注册
服务工作者的注册发生在主要的ReactJs App组件的componentDidMount()生命周期挂钩中:
componentDidMount() {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js')
.then((reg) => {
reg.onupdatefound = () => {
this.newWorker = reg.installing;
this.newWorker.onstatechange = () => {
if (this.newWorker.state === 'installed') {
if (reg.active) {
// a version of the SW is already up and running
/*
code omitted: displays a snackbar to the user to manually trigger
activation of the new SW. This will be …Run Code Online (Sandbox Code Playgroud)