Мой PWA использует стратегию кэширования в первую очередь в Интернете.
Если запрос успешен, он сохраняется в динамическом кеше с URL-адресом в качестве ключа.
Если запрос не выполняется, сервисный работник проверяет, хранится ли этот запрос в динамическом кеше, и возвращает его.
Эта часть работает нормально, я могу посещать все страницы, которые я посещал в Интернете, когда я не в сети, проблема в том, что я хотел бы вернуть статическую html-страницу с кнопкой, которая ведет на домашнюю страницу, когда у меня ничего нет в динамическом кеше .
Я хочу сделать это, потому что я застреваю на офлайн-странице, если пытаюсь посетить страницу, которая еще не была динамически кэширована, потому что в полноэкранном режиме нет кнопки возврата в браузере.
Мой код сервисного работника:
event.respondWith(
fetch(event.request)
.then(function(res) {
return caches.open('eyewit')
.then(function(cache) {
// console.log( 'Goes to cache: ' + event.request.url );
// console.log( 'DYNAMIC' );
let url = event.request.url;
// dont cache maps
if (url.indexOf('google') == -1) {
// store request to dynamic cache
cache.put(url, res.clone());
}
return res;
})
})
.catch(function(err) {
// look for value in cache if request fails
console.log( 'From cache' );
// I would like to return static page ./offline.html if there is nothing in cache
// with key event.request, if value exist return it instead
// caches.match returns promise
return caches.match(event.request);
})
);
Я пробовал это сделать, но это не сработало, потому что caches.match (event.request) возвращает обещание:
.catch(function(err) {
// return value from dynamic cache if exists
if(caches.match(event.request)) {
return caches.match(event.request);
} else {
// serve static page
return caches.open('static_cache')
.then((cache) => {
return cache.match('offline.html');
});
}