Я создаю устанавливаемый PWA из CRA. Я добавил пользовательский сервисный работник, который кэширует все внешние запросы, используя API кэша рабочего сервиса. После первого запроса я могу переключить свой телефон в режим полета, и приложение все еще работает, однако, когда я оставляю приложение установленным на моем телефоне в течение дня и возвращаюсь, приложение больше не работает в автономном режиме и вместо этого показывает «Safari». не удается открыть страницу, потому что ваш iPhone не подключен к inte rnet ".
Имеет ли установленный PWA на iOS срок действия кэша? Я что-то не так делаю?
Вот мой код работника службы:
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;
});
});
});
})
);
});