iOS PWA';添加到主屏幕';缓存在一天后过期
我正在用CRA建立一个可安装的PWA。我添加了一个自定义服务工作者,它使用服务工作者缓存API缓存所有外部请求。在第一次请求后,我可以将手机切换到飞行模式,应用程序仍然可以工作,但是当我离开手机上安装的应用程序一天后回来,应用程序不再在脱机模式下工作,而是显示“Safari无法打开页面,因为你的iPhone未连接到互联网” iOS上安装的PWA是否有缓存过期?我做错什么了吗 这是我的服务人员代码:iOS PWA';添加到主屏幕';缓存在一天后过期,ios,caching,service,progressive-web-apps,worker,Ios,Caching,Service,Progressive Web Apps,Worker,我正在用CRA建立一个可安装的PWA。我添加了一个自定义服务工作者,它使用服务工作者缓存API缓存所有外部请求。在第一次请求后,我可以将手机切换到飞行模式,应用程序仍然可以工作,但是当我离开手机上安装的应用程序一天后回来,应用程序不再在脱机模式下工作,而是显示“Safari无法打开页面,因为你的iPhone未连接到互联网” iOS上安装的PWA是否有缓存过期?我做错什么了吗 这是我的服务人员代码: const PRECACHE = "precache-v1"; const RUNTIME = "
const PRECACHE = "precache-v1";
const RUNTIME = "runtime-v2";
const PRECACHE_URLS = [];
this.addEventListener("install", event => {
event.waitUntil(
caches
.open(PRECACHE)
.then(cache => cache.addAll(PRECACHE_URLS))
.then(this.skipWaiting())
);
});
this.addEventListener("activate", event => {
const currentCaches = [PRECACHE, RUNTIME];
event.waitUntil(
caches
.keys()
.then(cacheNames => {
return cacheNames.filter(cacheName => !currentCaches.includes(cacheName));
})
.then(cachesToDelete => {
return Promise.all(
cachesToDelete.map(cacheToDelete => {
return caches.delete(cacheToDelete);
})
);
})
.then(() => this.clients.claim())
);
});
this.addEventListener("fetch", event => {
event.respondWith(
caches.match(event.request).then(cachedResponse => {
if (cachedResponse) {
return cachedResponse;
}
return caches.open(RUNTIME).then(cache => {
return fetch(event.request).then(response => {
return cache.put(event.request, response.clone()).then(() => {
return response;
});
});
});
})
);
});
如果你的设备没有太多额外空间,Safari可能会清理缓存。没错,这就是问题所在!过了一段时间才发现。谢谢