4

Ich untersuche Techniken für den Aufbau einer Progressive Web App in Aurelia mit Offline-Funktionalität, die in allen gängigen Browsern funktioniert. Service-Arbeiter sind scheinbar die bevorzugte Option für das Asset-Caching, aber mit mangelnder Unterstützung in Safari (und derzeit Edge). Ist es möglich, Service-Mitarbeiter mit einem Fallback auf Appcache zu verwenden, wenn sie nicht unterstützt werden? Wie verhält sich eine Anwendung, wenn ein Appcache-Manifest UND ein Service-Mitarbeiter installiert ist?Implementieren von Service-Mitarbeitern mit einem Appcache-Fallback für nicht unterstützte Browser

Antwort

4

wenn ein Browser-Dienst Arbeiter unterstützt, dann wird der Dienst Arbeiter Caching anstelle des AppCache Manifest verwendet werden. Sie können das appCache-Manifest für ältere Browser wie Safari hinzufügen, und die Dinge funktionieren so, wie sie es in der Vergangenheit getan haben. Plus für moderne Browser werden sie Service-Arbeiter-Caching nutzen und so tun, als ob der AppCache nicht existiert. So ähnlich wie reaktionsschnelle Bilder funktionieren.

+0

+1 diese Bibliothek für schluck folgt, dass die Philosophie: https://github.com/arcturus/gulp-sww Es erstellt alle Serviceworker Dateien Ihrer Website cachen, sondern schafft auch die AppCache Code zur Rückfall benötigt. Hier ist der Code für die Erkennung der Installation von ServiceWorker der Fallback zu appcache: https://github.com/arcturus/gulp-sww/blob/master/templates/unminified/install.tpl.js –

+0

Seien Sie darauf hingewiesen Obwohl Appcache ignoriert wird, lädt Chrome den Appcache nach der Registrierung der SW herunter und aktualisiert ihn. (Das war ein offener Fehler seit 2014, also halte nicht den Atem an.) Https://crbug.com/410665 –

+0

gut zu wissen! Ich weiß, dass appCache gerade von den meisten Browsern als veraltet gilt. Ich denke, nächstes Jahr ist irgendwann das Ziel, aber das könnte variieren. –

2

Die Prüfung, die Technologie der Browser easly getan unterstützt:

if(navigator.serviceWorker){ 
    initServiceWorker() 
}else if(window.applicationCache){ 
    initApplicationCache(); 
}else{ 
    console.log('no caching possible'); 
} 

Dynamisches Laden ein Servicemitarbeiter kein Problem sein sollte, da es ohnehin in Javascript gemacht wird.

Dynamisches Laden Application des Mainfest scheint nicht möglich zu sein, aber Sie können einen Iframe Hack versuchen, siehe: Dynamically Trigger HTML5 Cache Manifest file?

Verwandte Themen