it-swarm.com.de

Mobile Web App löscht den Cache nicht ordnungsgemäß

Ich habe eine mobile Web-App für das iPad entwickelt und bin beim Testen meines Codes auf ein Problem gestoßen. 

Gelegentlich und scheinbar willkürlich wird das iPad alle JS-Bibliotheken, die ich geschrieben habe, nicht mehr richtig aktualisieren. Nach dem Aktualisieren von Code und dem Veröffentlichen der Änderungen werden einige Dateien ordnungsgemäß aktualisiert, andere jedoch nicht. Dieses Verhalten bleibt auch nach zahlreichen Cache-Löschvorgängen, Ein- und Ausschaltvorgängen und WLAN-Wechseln bestehen. 

Wenn ich die App in Safari lade, habe ich keine Probleme damit, aber wenn ich über das Symbol des Startbildschirms der App lade, wird das Problem erneut angezeigt. Ich habe einfache Tests durchgeführt, z. B. das Hinzufügen einer Warnzeile zu einer Bibliothek, und diese Warnmeldung wird ohne Probleme außerhalb des Mobile-Web-App-Fensters ausgelöst. Dann, scheinbar willkürlich wieder, verschwindet das Problem, manchmal dauert es 5 Minuten, manchmal dauert es eine Stunde. 

Ich sehe dieses Verhalten unabhängig davon, ob die App eine Manifestdatei verwendet oder nicht. Ich habe auch versucht, diese älteren Dateien zu leeren, indem die Manifest-Datei aktualisiert wurde, um den Recache auf diese Weise zu erzwingen. Das Problem bleibt jedoch bestehen. 

Weiß jemand, ob dies ein bekanntes Problem mit dem iPad ist? Gibt es irgendetwas an meinem Ende, das dies tun kann?

32
Mulberry

Für mich fügt die Lösung am Ende aller Javascript- und CSS-Links ?v=1 hinzu. Ich habe alles ausprobiert, bevor ich das in einem anderen Stackoverflow-Beitrag gesehen habe. Es wurde Zeit...

11
Ludovic

Ich habe die Lösung bekommen!

Aber zuerst das Problem: iPad und iPhone aktualisieren den Cache beim Öffnen der App nicht. Auch das Löschen der App, das Löschen des Safari-Caches, das Neustarten des Geräts usw. usw. funktioniert nicht.

Und hier ist die Lösung ... taadaa!

Ihre Manifest-Datei MUSS sich ändern. Wenn es geändert wird, lädt das iPad/iPhone den Cache neu. Schreiben Sie einfach eine Versionsnummer in Ihre Manifestdatei und ändern Sie sie, wenn Sie etwas geändert haben:

# Version: 1.2

Eine vollständige Manifestdatei könnte also so aussehen:

CACHE MANIFEST

# Version 1.5

NETWORK:
*

CACHE:
index.html
jquery-1.7.2.min.js
images/logo.jpg

Es lädt sogar Dinge wie Bilder neu, die nicht in die Manifestdatei geschrieben werden. Ich habe es mehrmals getestet.

Übrigens Vergessen Sie nicht, Ihre Manifestdatei mit http://manifest-validator.com zu überprüfen.

Meine Quelle ist dies sehr cool, wie man sich mit Offline-Webanwendungen befasst: (http://gregsramblings.com/2012/05/28/html5-application-cache-how-to/

Es besagt auch, dass Sie Ihre App möglicherweise zweimal starten müssen:

Wenn das Manifest aktualisiert wurde, lädt der Browser alle Dateien in der Liste der zwischengespeicherten Dateien herunter, ABER der ursprüngliche Inhalt ist zu diesem Zeitpunkt bereits geladen (denken Sie daran, dass er bereits zwischengespeichert ist, sodass er sehr schnell geladen wird!). 

Aber es hat für mich immer beim ersten Versuch funktioniert.

8
bench-o

Umgehen Sie dieses Problem. Fügen Sie einen Link zu der Webanwendung hinzu, wie ...

<a href="javascript:top.frames.location.reload();">refresh</a>

Es funktioniert genauso wie die Reload-Taste in der Adressleiste des iPhone/iPad Safari!

6
John Wolf

Ich habe mehrere Stunden damit verbracht, dieses Problem zu beheben, und es scheint, als könnte die Manifest-Datei, die das Zwischenspeichern von Dateien verwalten soll, selbst zwischengespeichert werden und Ihre Web-App bleibt in der Luft.

In meinem Fall wollte ich nichts zwischengespeichert haben. So habe ich das Problem gelöst:

  • Aktivieren Sie das mod_expires Apache-Modul auf meinem Server
  • Erstellen Sie eine .htaccess-Datei in demselben Verzeichnis wie die Indexdatei. Die Datei sollte die Zeile ExpiresDefault A1 enthalten.

Dies teilt dem Server mit, dass jede Datei eine Sekunde nach dem Zugriff ablaufen sollte. Meine Web-App wird auf Studenten-Konventionen als Umfrage verwendet. Daher wird sie jeweils nur von einer Person verwendet. Meine Lösung funktioniert für mich. Möglicherweise müssen Sie es weiter anpassen, damit es Ihnen passt.

In der Vergangenheit hatte sich dieses Problem scheinbar willkürlich präsentiert. Alle meine letzten Tests haben gezeigt, dass es so reagiert, wie man es erwarten würde.

2
Jezen Thomas

Ich kann nicht überprüfen, ob der Cache ordnungsgemäß gelöscht wurde. Dies hat jedoch für mich funktioniert:

Dazu müssen Sie Web Inspector auf Ihrem iOS-Gerät zulassen. Gehen Sie zu Einstellungen> Safari> Erweitert> Web Inspector (muss aktiviert sein) Computer Safari . Gehen Sie zu Voreinstellungen> Erweitert> Entwickler aktivieren 

  1. Verbinden Sie Ihr Gerät mit dem USB-Kabel mit Ihrem Computer
  2. Gehen Sie zu Safari> Entwicklung> Name Ihres Geräts> App überprüfen (Die App muss ausgeführt werden)
  3. Dies öffnet den Inspector auf Ihrem Computer für die Web-App
  4. Während der Inspektor geöffnet ist, Cache leeren (Befehl + Alt + E)
  5. Während der Inspektor noch geöffnet ist, aktualisieren Sie die Seite auf Ihrem Computer (Befehl + R).

Irgendwie wurde der Webapp-Cache gelöscht und ich erhielt den nicht zwischengespeicherten Code.

2
onemesh

das Ein- und Ausschalten des iPads funktioniert für mich - zumindest bei iOS 5. Nicht vollständig ausgeschaltet. Verwenden Sie einfach die Standby-Taste oben auf dem iPad und anschließend die Home-Taste, um es wieder einzuschalten. Das Anhängen einer Versionsnummer am Ende der Dateien funktioniert ebenfalls, aber das wird ziemlich langweilig.

1
Summer

Ich habe genau das gleiche Problem mit meinen Webanwendungen auf dem iPad. Manchmal führt die im Standalone-Modus ausgeführte Webanwendung gelegentlich dazu, dass eine bestimmte Ressource (HTML/CSS/JS-Datei) nicht aktualisiert wird, obwohl jede mögliche Anwendung gelöscht wird Safari-Cache & Verlauf, Neustart, Neustarten der WLAN-Verbindung, Aktualisieren oder Entfernen der manifest-Datei oder Einsetzen des Geräts in eine Mikrowelle; Selbst das Anbringen eines Vorschlaghammers erwies sich als zwecklos.

Ich habe zwar keine "koschere" Methode gefunden, um das Problem zu beheben, es gibt jedoch immer eine Problemumgehung - umbenennen Die Ressource.

Ändern Sie einfach den Namen der nicht aktualisierenden Datei. Wenn Sie ein Problem mit foobar.js haben, das nicht aktualisiert wird, benennen Sie es in foobar2.js um und aktualisieren Sie die Verweise auf diese Ressource in anderen Dateien. Dies könnte natürlich ein Schmerz in Sie wissen, was ist (vor allem, wenn Sie nach einer Woche Entwicklung bei foobar12.js sind), aber bis wir eine offizielle Korrektur für iOS oder eine funktionierende Auffrischungstechnik sehen, ist dies die einzige Möglichkeit wissen, um es zum Laufen zu bringen.

1
Neo

Um dieses Problem zu beheben, sollten Sie neue Buchstaben mit Zahlen (nicht nur Zahlen) am Ende des Links wie folgt hinzufügen:

?v1
?x2
?z3

Und jedes Mal, wenn Sie Ihr Skript aktualisieren möchten, sollten Sie andere Buchstaben und Zahlen hinzufügen (andere Buchstaben sind erforderlich, da heutzutage viele mobile Browser alle reinen Zahlen am Ende des Javascript/CSS-Links ignorieren.)

0

Ich habe viele Tage damit verbracht, an diesem Problem zu arbeiten. Aufgrund einiger zufälliger Änderungen, die ich sowohl in CSS als auch in HTML vorgenommen hatte, sah es wie ein Rendering-Fehler aus. Dadurch wurden an zufälligen Stellen Schaltflächen auf dem Bildschirm angezeigt, wodurch die App unbrauchbar wurde.

Ich stellte fest, dass das CSS nach mehreren Tagen des Pochens und Stossens zwischengespeichert wurde, und schließlich versuchte ich, die Dateien umzubenennen, worüber @Neo etwas spricht. Ich habe auch die Cache-Steuerung in meiner .htaccess-Datei geändert, da ich einen alten .htaccess verwendet hatte, der den Browser für ein Jahr zum Zwischenspeichern aufgefordert hat.

tl; dr: Entfernen Sie cache-control ( mod_expires und mod_headers ) für Ihre Webapp-Dateien, und verwenden Sie einfach ein cache-Manifest , falls Sie dies noch nicht getan haben. Benennen Sie dann die Dateien um und aktualisieren Sie die Links in Ihrem HTML-Code.

0
skeggse

Ich hatte genau das gleiche Problem.

Ich habe die verschiedenen Vorschläge hier ausprobiert und die Cache-Kontrolle ohne Erfolg hinzugefügt. Ich habe versucht, die Datei umzubenennen, die sich nicht aktualisiert hat, kein Glück. Ich habe versucht, ein Cache-Manifest hinzuzufügen (zuvor hatte ich eines, aber es entfernt), kein Glück. Und ich habe alle üblichen Dinge ausprobiert: App löschen, Cache löschen, neu starten, App neu installieren, kein Glück.

Das einzige, was für mich funktioniert hat, war das virtuelle Verzeichnis auf meinem Webserver umzubenennen. Dies ist möglicherweise nicht für jeden eine praktikable Lösung, aber zum Glück war dies nicht wirklich ein Problem, da ich einen local IIS Server teste.

0
René