node.js - Angular PWA - Ruter til egendefinert frakoblet side når ingen tilkobling er tilgjengelig
I en Angular PWA vil jeg omdirigere brukeren til en tilpasset frakoblet side (offline.html) hvis det ikke er internettforbindelse tilgjengelig.
Ved å bruke ng-sw.config.json-filen satte jeg opp hvilke ressurser og API-er som skulle caches og hvilken strategi som skulle brukes (ytelse/ferskhet), og jeg kunne betjene applikasjonen selv når jeg var offline uten problemer. Nå ønsker jeg å vise en tilpasset offline-side, men blant veiledninger og guider kunne jeg ikke se en måte å oppnå dette på med Angular og dets service-worker-modul.
Jeg lurer på om en mulig løsning ville være å lage en tjeneste som sjekker tilkoblingen (online/offline) og, hvis offline, omdirigerer til offline.html-siden. Tjenesten og html-siden ville bli bufret med en 'prefetch'-strategi for å sikre at de er tilgjengelige så snart servicearbeideren er installert.
Ellers ville jeg lage en grunnleggende service worker som importerer den standard Angular service worker og legger til logikk for å omdirigere til frakoblet-side hvis hentingskallet mislykkes.
Finnes det noen andre muligheter?
Svar #1
Først må du opprette en offline HTML-side og lagre den i assets-mappen.
Legg deretter til den offline-siden i din ng-sw.config slik:
"resources": {
"files": [
"/assets/favicon.ico",
"/*.css",
"/*.js",
"/assets/offline-page.html"
],
Neste i din app.component.html legger du til logikk som dette
ngOnInit() {
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(offlineUrl);
}
});
})
);
});
}
Så når brukeren er i frakoblet modus og prøver å navigere til en annen rute, vil de se frakoblet-siden
