В приложении Angular (8) я хотел бы добавить пользовательскую офлайн-страницу (для начала просто простой html-файл). Я настроил свое приложение как PWA (используя @angular/pwa
и настроил все так, чтобы оно работало хотя бы без сбоев при подключении к Интернету).
Однако мне было трудно сделать обновления доступными для пользователей PWA,Итак, после многих часов попыток и ошибок я решил исключить index.html
из ngsw-config.json
. Это, конечно, приводит к тому, что index.html
загружается каждый раз (не так уж плохо, потому что он такой маленький). Если есть какие-либо обновления index.html
ссылки на разные JS-файлы и эти файлы загружаются немедленно. Итак, как я уже говорил, PWA работает так, как мне нравится.
Теперь я хочу отобразить offline.html
, когда пользователь запускает PWA в автономном режиме. Поэтому я добавил offline.html
к ngsw-config.json
и создал пользовательский сервисный работник, включая официальный ngsw-worker.js
:
importScripts('./ngsw-worker.js');
Я также использую этот пользовательский сервисный работник вместо официальногоодин:
ServiceWorkerModule.register('./custom-worker.js', { enabled: true, registrationStrategy: registrationStrategy })
Пока все работает как положено. Поведение такое же, как и раньше. Теперь я хотел включить автономное поведение в свой пользовательский работник:
importScripts('./ngsw-worker.js');
self.addEventListener('fetch', function(event) {
return event.respondWith(
caches.match(event.request)
.then(function(response) {
let requestToCache = event.request.clone();
return fetch(requestToCache).then().catch(error => {
// Check if the user is offline first and is trying to navigate to a web page
if (event.request.method === 'GET' && event.request.headers.get('accept').includes('text/html')) {
// Return the offline page
return caches.match("offline.html");
}
});
})
);
});
Этот скрипт взят из: https://stackoverflow.com/a/56738140/4653997 К сожалению, эта часть не работает вообще. На данный момент я в значительной степени застрял. Я понятия не имею, что делать дальше. Я думал, что сервисные работники будут казнены, может ли index.html
быть загружен или нет.
Любая помощь будет оценена.