Ich verwende die Cache API und erkunde, wie viel ich damit tun kann, ohne Service-Arbeiter zu verwenden.Verwenden der Cache-API zum Zwischenspeichern von Webseiten ohne Service-Mitarbeiter
Ich habe zwei Hauptanwendungsfälle:
- Laden zwischengespeichert Vermögenswerte, wenn der Benutzer offline ist
- die Seite neu geladen wird, wenn der Benutzer offline ist
Für den ersten Anwendungsfall Ich kann Bilder unter Verwendung des folgenden Codes zwischenspeichern:
if('caches' in window) {
caches.open('my-cache').then(function(cache_obj) {
cache_obj.addAll(['/', '/img/first.png', '/img/second.png'])
.then(function() {
console.log('Cached!');
});
});
}
Wenn ich den Benutzer offline nehmen, dann lade ich das Bild in das DOM programmatisch wie so:
$('body').append('<img src="/img/first.png">');
Das Bild auf der Seite angezeigt wird, wie erwartet. Wenn ich first.png
aus der Liste der gecachten Bilder entferne und dies dann wiederhole, erscheint das Bild nicht [weil es nicht zwischengespeichert wird]. Die Cache-API funktioniert also sehr gut für den ersten Anwendungsfall.
Allerdings frage ich mich, ob ich das gleiche für den zweiten Anwendungsfall tun kann. Kann ich eine vollständige HTML-Seite offline speichern und dann neu laden, wenn der Benutzer offline ist, ohne jedoch einen Service-Mitarbeiter einrichten zu müssen?
Hinweis: Ich habe eine Art, wie ich etwas sehr ähnlich localstorage/session tun kann, mit dem HTML-Inhalt der Seite cachen und dann intelligent in die aktuelle Seite geladen werden, wenn der Benutzer offline ist [mit offline.js Erkennung ], aber ich suche nach einem einfacheren Ansatz mit der Cache-API.
Mögliche Duplikate von [Wie zu verwenden Fenster .caches, um Seiten vom Fenstergegenstand zu speichern?] (https://stackoverflow.com/questions/44239518/how-to-use-window-caches-to-save-pages-from-window-object) –
@JeffPosnick Thanks. Ich denke, das bedeutet, dass der zweite Anwendungsfall nicht möglich ist? –
Sie benötigen einen Service-Mitarbeiter, um die Navigationsanforderung für eine bestimmte Seite offline auszuführen. –