Sobald Sie ein HTML-Dokument hat ein manifest (cache.das manifest), wie können Sie es entfernen?

StackOverflow https://stackoverflow.com/questions/4542299

  •  13-10-2019
  •  | 
  •  

Frage

Es scheint, dass, wenn Sie eine manifest-Eintrag, a la:

<html manifest="cache.manifest">

Dann, die Seite (die master-Eintrag im cache) wird immer zwischengespeichert werden (zumindest von Safari), bis der Benutzer etwas tut, zu löschen, den cache, auch wenn Sie später entfernen Sie die manifest-Attribut des html-Tags und aktualisieren Sie die manifest - (indem etwas in es), zwingt den master-Eintrag nachgeladen wird, zusammen mit allem anderen.

In anderen Worten, wenn Sie:

  • index.html (mit manifest definiert)
  • file1.js (Referenz-in manifest)
  • file2.js (Referenz-in manifest)
  • - cache.manifest (Listen die beiden js Dateien)

-- entfernen Sie den manifest-Eintrag aus index.html und ändern Sie die manifest - (so kommt es lief browser und für alle Inhalte neu geladen) werden nicht aufhören, diese Seite von sich so verhält, als ob es immer noch vollständig in den Cache geladen.Wenn Sie view source index.html sehen Sie nicht das manifest aufgelisteten nicht mehr, aber der browser wird immer noch nur auf Anfrage cache.manifest-Datei, und es sei denn, die Datei-Inhalt geändert wird, werden keine weiteren änderungen an Dateien werden dem Benutzer angezeigt werden.

Es scheint wie ein ziemlich krasser Fehler, und es ist derzeit auf iOS-als auch Mac-Versionen von Safari.Hat jemand einen Weg gefunden, das zurücksetzen der Seite und loszuwerden, den cache, ohne Benutzereingriff?

War es hilfreich?

Lösung

Ich habe seit Jahren die gleiche Frage, und es ist nicht zu sein scheinen eine api an:

  1. dynamisch-trigger, der eine Seite zwischengespeichert wird
  2. dynamisch verursachen, eine Seite zu stoppen zwischengespeichert.

Hier sind die besten Ressourcen, die ich gefunden habe:

http://www.html5rocks.com/tutorials/appcache/beginner/

http://www.thecssninja.com/javascript/how-to-create-offline-webapps-on-the-iphone

Insbesondere dieses Zitat aus dem ersten link:

Wenn die manifest-Datei oder eine darin angegebene Ressource schlägt fehl, zum herunterladen, den gesamten update schlägt fehl.Der browser wird weiterhin die alte Anwendung cache in die Ereignis, dass ein solcher Fehler.

Sonst, es wird nicht erwähnt, überall zu entladen cache.

Scheint nahe zu legen, dass man nicht zwingen einen Fehler, um es zu uncache.Jedoch, wie unten angegeben, die Spezifikation schlägt vor, dass, wenn ein Fehler Auftritt beim Download der manifest-Datei, die den gesamten cache entfernt.

In google chrome, die Benutzer können rufen Sie folgende URL auf:

chrome://appcache-internals/

Und manuell deaktivieren Sie den cache.Natürlich, wenn Sie das nächste mal besuchen Sie die Seite, wird es recached wenn die Seite hat die manifest-Eigenschaft festgelegt.

Wenn Sie sich die Spezifikation:5.6 Offline-Web-Anwendungen

Es scheint nahe zu legen eine situation, wo der cache entfernt wird.Speziell, Abschnitt 5.6.4.5:

Wenn beim abrufen des manifests fällt aufgrund einer 404-oder 410-Antwort oder gleichwertig, dann führen Sie die folgenden Unterschritte aus:Markieren cache-Gruppe als veraltet.Dieser cache Gruppe existiert nicht mehr für irgendeinen anderen Zweck als die Bearbeitung von Dokument-Objekte, die bereits einer Anwendung zugeordnet cache in der cache-Gruppe.Wenn die cache-Gruppe hat einen Anwendungs-cache, deren Vollständigkeit flag unvollständig ist, dann verwerfen, dass die Anwendung cache.

Es sagt dann:

Ob das ein cache-Versuch zu verwerfen, cache-Gruppe insgesamt.

Im Grunde, wenn die Anforderung für die cache-manifest-Datei eine 404, dann wird der gesamte cache verworfen werden sollte.So haben Sie versucht, den server zurückgeben einer 404-oder 410, wenn die cache-manifest-Datei angefordert wird?Das sollte funktionieren.Der trick ist, nur die Rückkehr des 404 / 410 für die Seiten, die Sie entfernen möchten, die vom manifest (vielleicht mittels url-Parameter?).

Andere Tipps

Eine mögliche Lösung:

  • Ändern Sie das Manifest (damit es neu lädt)
  • Ändern Sie die Masterdatei (index.html), um ein nicht existierendes Manifest zu verweisen, sodass sie einen 404 erhält

Kaum elegant, aber es scheint zu funktionieren. Das Hauptproblem ist dann, dass Sie an diesem 404 generierenden falschen Manifest-Eintrag festhalten, bis alle, die jemals auf Ihrer Website gewesen sind, zurückgekehrt ist und ihren Cache gelöscht hat.

Es muss einen besseren Weg geben ...

Versuchen Sie, löschen Sie einfach die manifest-Datei.Aus der mozzila docs :

Anwendung caches können auch obsolet geworden.Wenn das manifest vom server entfernt, die browser-Anwendung entfernt alle caches, die Verwendung, die manifestieren, dann sendet ein "veraltet" - Ereignis, um die Anwendungs-cache-Objekt.Dann den Anwendungs-cache-status gesetzt ist VERALTET.

Auch dies funktionierte für mich in chrome.

Eine Lösung, wenn Sie IIS 7 verwenden, besteht darin, den MIME -Typ für den .manifest- oder .Appcache -Dateityp zu entfernen, den Sie hinzugefügt haben, um das Caching zu aktivieren. Sie können dies jederzeit wieder hinzufügen, wenn Sie das Caching erneut aktivieren möchten. Das habe ich getan, um meine zu reparieren.

Wir löschen die Liste der Dateien im Manifest, sodass sie keine Datei zwischengespeichert werden.

Es funktioniert für uns.

Dies könnte alt sein, aber hoffentlich immer noch hilfreich für jemanden.

Schauen Sie sich Ihre HTTP -Header in IIS -Eigenschaften an. Schauen Sie sich an, wie Sie den Ablauf des Inhalts aktivieren oder deaktivieren können. Es könnte sein, dass IIS immer noch den Cache macht.

Für Entwicklungszwecke (Konstante Änderungen), was wir getan haben, ist:

  1. Legen Sie eine -cache-Manifest-Datei fest-unter Ihrer serverseitigen Sprache, beispielsweise verwenden wir PHP, sodass unser Entwicklungscache "cache.manifest.php" bezeichnet wird und in dem HTML-Tag wie folgt genauso zeigt:

    <html manifest="cache.manifest.php">
    
  2. Setzen Sie einige -Time-abhängige Zeichenfolge (oder etwas anderes, das Sie an Sie sitzt) irgendwo in Ihrem Manifest als Kommentar (#---), so dass die Datei von Zeit zu Zeit anders ist (Browser scheinen den Inhalt des Manifest zu vergleichen, nicht Datum ), zum Beispiel, diese Zeichenfolge ändert das Manifest in jeder Minute, auf diese Weise würden alle Dateien erneut ausgedehnt, wenn der Besuch in einer anderen Minute wie beim letzten Mal ist.

    <?php if($dev) echo date("Y-m-d H:m"); ?>
    

Wir haben dieses Verfahren gerade mit Chrome getestet, hoffen, dass es in anderen funktioniert, aber wenn nicht Ihre Kommentare und Ratschläge sehr geschätzt wären.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top