Frage

Ich bin derzeit ein Cache-Manifest verwenden (wie hier ). Damit wird an die notwendigen Ressourcen, um die Anwendung zur Verfügung laufen, wenn der Benutzer offline ist.

Leider funktioniert es ein wenig zu gut.

Nachdem das Cache-Manifest geladen wird, Firefox 3.5+ Caches alle Ressourcen explizit im Cache-Manifest verwiesen. Wenn jedoch eine Datei auf dem Server aktualisiert wird und der Benutzer versucht, kraft der Seite aktualisieren, während Sie online (einschließlich der Cache-Manifest selbst), wird Firefox absolut weigert, etwas zu holen. Die Anwendung bleibt am letzten Punkt vollständig eingefroren es zwischengespeichert wurde. Fragen:

  1. Ich möchte Firefox nur effektiv auf die im Cache gespeicherten Ressourcen verlassen, wenn die Netzwerkverbindung ausfällt. Ich habe versucht, den NOTFALL Block verwenden, aber ohne Erfolg. Ist das überhaupt möglich?
  2. Wenn # 1 nicht möglich ist, ist es möglich, dass der Benutzer auf eine Seite kraft aktualisieren und Bypass dieses Cache (ctrl-F5 tut es nicht, und weder die Browser-Cache nicht löschen, schockierend) kurz ihre privaten von Clearing Daten? Alternativ hat die Cache-Manifest Mechanismus Unterstützung Ablauf Header und ist sein Verhalten in Bezug auf diese dokumentiert überall?
War es hilfreich?

Lösung

Ich glaube, ich habe dies herausgefunden: wenn es ein Fehler in einem Cache-Manifest (sagen wir, eine referenzierte Datei nicht existiert), dann vollständig Firefox wird die Verarbeitung etwas Application Zusammenhang stoppen. Das heißt, es wird nicht Update nichts in Ihrem Cache, einschließlich im Cache befindlichen Cache-Manifest.

Um feststellen, dass dies das Problem war, ich

Andere Tipps

Ich habe Code verwendet von HTML5 Rocks: Aktualisieren Sie den Cache :

window.addEventListener('load', function(e) {
  if (window.applicationCache) {
    window.applicationCache.addEventListener('updateready', function(e) {
        if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
          // Browser downloaded a new app cache.
          // Swap it in and reload the page to get the new hotness.
          window.applicationCache.swapCache();
          if (confirm('A new version of this site is available. Load it?')) {
            window.location.reload();
          }
        } else {
          // Manifest didn't changed. Nothing new to server.
        }
    }, false);
  }
}, false);

Disclaimer:. Meine Erfahrung mit Manifesten und Cache ist alles, Safari und FF unterschiedlich, einige Dinge verarbeiten können

  1. Sie haben ganz recht. Wenn es irgendwelche Dateien sind auf dem Manifest aufgeführt, die nicht gefunden werden kann, wird kein Caching auftreten.

  2. Auch wenn Sie online sind, wird der Browser nur die Manifest-Datei überprüfen. Während für die Manifest-Datei wartet, wird es weiterhin die Seite aus dem Cache laden - diese Weise nicht Rendering nicht verzögert - aber es bedeutet, dass Sie nicht auf der ersten Last Änderungen sehen

  3. Das nächste Mal, wenn die Seite geladen wird, wenn das Manifest geändert auf der vorherige Last, die neuen Dateien geladen werden.

Es ist immer notwendig nachladen ZWEIMAL alle Änderungen zu sehen. In der Tat habe ich manchmal zu Reload 3 mal habe das Update zu sehen. Keine Ahnung, warum.

Beim Debuggen, erzeuge ich meine Manifest-Datei on the fly mit php, so gibt es keine Chance auf einen Tippfehler in einem Dateinamen. Ich erzeugen auch die Versionsnummer jedes Mal zufällig eine Aktualisierung zu erzwingen, aber immer noch einen Offline-Webapp hat den Zweck zu testen.

Wenn Sie fertig sind, können die PHP-Datei echo nur die gespeicherten Manifestdaten mit einer konstanten Versionsnummer und der Cache wird immer verwendet werden.

Nur ein paar Dinge, die ich gelernt habe, während mit manifester und Cache spielen vor kurzem. Es funktioniert gut, aber kann verwirrend sein.

Es gibt keinen Ablauf. Um uncache, müssen Sie die Manifest-Datei nichts darin zu haben, ändern und machen Sie einen Reload. Auf Safari, die Benutzer-Cache zu löschen alle Cache-Dateien löscht.

Ich hatte das gleiche Problem: einmal Firefox die Offline-Dateien gespeichert, wäre es nicht, sie jemals wieder laden. Chrome arbeitete wie erwartet, es die Manifest-Datei auf Änderungen überprüft und neu geladen wird alles, wenn die Manifest-Datei geändert. Firefox hatte Download nicht einmal die Manifest-Datei vom Server, so dass es nicht konnte Ankündigung Änderungen.

Nach einer Untersuchung, fand ich heraus, dass Firefox wurde Caching die Cache-Manifest-Datei (altmodische Cache, nicht die Offline-Cache). Einstellen des Cache-Header der Manifest-Datei zu Cache-Control: no-cache, private wurde das Problem behoben.

Ich habe ein Firefox Add-on dem Erlöschen der Cache-Manifest und löscht HTML5 lokalen Speicher.

http: // sites.google.com/site/keigoattic/home/webrelated#TOC-Firefox-HTML5-Offline-Cache-and-Loc

Sie können auch das Cache-Manifest ungültig machen, indem Sie den Code unten in der Fehlerkonsole eingeben:

// invalidates the cache manifest
var mani = "http://.../mysite.manifest"; // manifest URL
Components.classes["@mozilla.org/network/application-cache-service;1"].getService(Components.interfaces.nsIApplicationCacheService).getActiveCache(mani).discard();

Oder indem Sie den Code unten in der Adressleiste eingeben, wird den Cache manuell enforece aktualisiert werden:

javascript:applicationCache.update()

Hmm, ich habe gerade genannt update () auf dem Cache, nachdem sie auf die Manifest-Datei bearbeitet Änderung vorgenommen haben, und erhielt die vollständige Sequenz des Check / Download / bereit, ein Neuladen tat, und eine Textänderung ich in einem gemacht hatte meine js Dateien, die zeigen, in der Anfang Seite meiner app, prompt erscheint.

Es scheint, ich brauche nur ein reload.

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