Mobile Web App löscht den Cache nicht richtig

Lesezeit: 7 Minuten

Benutzer-Avatar
Maulbeere

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 stoppt das iPad alle JS-Bibliotheken, die ich geschrieben habe, ordnungsgemäß zu aktualisieren. Nachdem ich etwas Code aktualisiert und die Änderungen gepostet habe, werde ich feststellen, dass einige Dateien ordnungsgemäß aktualisiert wurden, während andere dies nicht getan haben. Dieses Verhalten bleibt nach zahlreichen Cache-Löschungen, Einschaltzyklen und WLAN-Umschaltungen bestehen.

Wenn ich die App in Safari lade, habe ich keine Probleme damit, aber wenn ich über das Homescreen-Symbol der App lade, tritt das Problem erneut auf. Ich habe einfache Tests durchgeführt, z. B. das Hinzufügen einer Warnzeile zu einer Bibliothek, und diese Warnung wird überall ohne Probleme ausgelöst, außer im Fenster der mobilen Web-App. Dann, scheinbar zufällig 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 Legacy-Dateien zu leeren, indem ich die Manifest-Datei aktualisiert habe, um den Recache auf diese Weise zu erzwingen, aber das Problem besteht weiterhin.

Weiß jemand, ob dies ein bekanntes Problem mit dem iPad ist? Gibt es irgendetwas von meiner Seite, das getan werden kann, um dies zu beheben?

  • Alter Beitrag, aber das Setzen des Datums in die Zukunft und dann wieder zurück kann auch funktionieren (als schneller Trick) stackoverflow.com/questions/17576069/…

    – Adam Marshall

    2. Januar 2014 um 12:21 Uhr

Benutzer-Avatar
Ludovic

Für mich ist die Lösung das Hinzufügen ?v=1 am Ende all Ihrer Javascript- und CSS-Links. Ich habe alles versucht, bevor ich das in einem anderen Stackoverflow-Post gesehen habe, und es hat direkt funktioniert !!! Es wurde Zeit…

  • QUELLE: stackoverflow.com/questions/8792255/…

    – Anthony Graglia

    13. März 2013 um 16:22 Uhr

  • Dies funktioniert nicht für die Haupt-HTML/PHP-Datei an der Basis der App. Ärgerlich.

    – die Blumen der Zeit

    20. Dezember 2013 um 22:07 Uhr

  • Sie müssen sie in Ihre Manifestdatei schreiben wie: CACHE MANIFEST #Version 3.0.10 CACHE: index.html …

    – Ludović

    29. Januar 2014 um 17:58 Uhr


Ich habe die Lösung!

Aber zuerst das Problem: iPad und iPhone aktualisieren den Cache beim Öffnen der App nicht. Auch das Löschen der App, das Leeren des Safari-Cache, 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 also 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 wurden. Ich habe es mehrfach getestet.

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

Meine Quelle ist diese sehr coole Anleitung zu Offline-Webanwendungen: http://gregsramblings.com/2012/05/28/html5-application-cache-how-to/

Es heißt 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, also superschnell geladen wird!).

Aber bei mir hat es immer auf Anhieb geklappt.

  • Leider scheint dies nicht zu funktionieren, wenn nur die CSS-Datei geändert wird. Mein Manifest wird dynamisch generiert und enthält den zuletzt geänderten Zeitstempel der zuletzt geänderten Datei. Wenn ich in Safari auf dem iPad nachschaue, sind alle Änderungen sichtbar, aber wenn ich vom Startbildschirm aus starte, werden die alten Daten irgendwo zwischengespeichert. Das Löschen der Startbildschirm-App, das Löschen von Safari-Cache/Cookies und gespeicherten Websites löst das Problem NICHT. Wenn ich die App erneut zum Startbildschirm hinzufüge und sie über das Symbol starte, lädt sie immer noch das alte zwischengespeicherte CSS.

    – Alexander G

    29. März 2014 um 21:25 Uhr

  • Dies reicht nicht aus, um die Webapp dazu zu bringen, den Cache auf iOS zu aktualisieren. Unter Safari funktioniert es gut, aber nicht, wenn die Webapp vom Homescreen aus gestartet wird

    – Frank

    20. August 2014 um 4:51 Uhr

  • @bench-o Validator-Link ist defekt. Kann keinen offensichtlichen Ersatz finden. Es ist auch nicht mehr klar, von welchem ​​Manifest Sie sprechen, da manifest.json jetzt eine Sache ist, während ich denke, Sie beziehen sich auf das Appcache-Manifest von Safari?

    – Toxaq

    2. November 2017 um 21:22 Uhr


Umgehen Sie dieses Problem. Fügen Sie einen Link zur Web-App selbst hinzu wie…

<a href="https://stackoverflow.com/questions/8337631/javascript:top.frames.location.reload();">refresh</a>

Es funktioniert genau wie die Schaltfläche „Neu laden“ in der Adressleiste von iPhone/iPad Safari!

Ich habe mehrere Stunden damit verbracht, dieses Problem zu beheben, und es scheint, als ob die Manifestdatei, die das Datei-Caching verwalten soll, selbst zwischengespeichert werden kann, wodurch Ihre Web-App in der Schwebe bleibt.

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

  • Aktivieren Sie das Apache-Modul mod_expires auf meinem Server
  • Ein … kreieren .htaccess Datei im selben Verzeichnis wie die Indexdatei. Die Datei sollte die Zeile enthalten ExpiresDefault A1.

Dadurch wird dem Server mitgeteilt, dass jede Datei eine Sekunde nach dem Zugriff ablaufen soll. Meine Web-App wird als Umfrage auf Studentenkongressen verwendet, sodass sie immer nur von einer Person verwendet wird. Meine Lösung funktioniert für mich; Möglicherweise müssen Sie es weiter anpassen, damit es zu Ihnen passt.

In der Vergangenheit tauchte dieses Problem scheinbar zufällig auf. Alle meine jüngsten Tests haben gezeigt, dass es so reagiert, wie man es erwarten würde.

Ich kann nicht überprüfen, ob der Cache ordnungsgemäß gelöscht wurde, aber das hat bei mir funktioniert:

Dazu müssen Sie Web Inspector auf Ihrem iOS-Gerät zulassen. Gehen Sie zu Einstellungen > Safari > Erweitert > Web Inspector (muss aktiv sein) Und Sie müssen das Entwicklermenü auf Safari Ihres Computers aktivieren. Gehen Sie zu Einstellungen > Erweitert > Entwicklermenü aktivieren

  1. Verbinden Sie Ihr Gerät mit dem USB-Kabel mit Ihrem Computer
  2. Gehen Sie zu Safari > Entwicklung > Ihr Gerätename > Inspizieren Sie eine App (Die App muss ausgeführt werden)
  3. Dadurch wird The Inspector auf Ihrem Computer für die Web-App geöffnet
  4. Während der Inspektor geöffnet ist, leeren Sie den Cache (Befehl + Alt + E)
  5. Aktualisieren Sie bei geöffnetem Inspektor die Seite auf Ihrem Computer (Befehl + R).

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

  • Würde dies auch mit der letzten Version von Safari für Windows funktionieren?

    – Chamberlainpi

    28. Mai 2015 um 18:11 Uhr

  • Dies ist die einzige Lösung, die bei der Verwendung einer AngularJS-Vollbild-Web-App auf dem iPad für mich funktioniert hat.

    – dk80

    31. Mai 2016 um 16:10 Uhr

Benutzer-Avatar
Neo

Ich habe genau das gleiche Problem mit meinen Webanwendungen auf dem iPad – manchmal würde die im Standalone-Modus ausgeführte Webanwendung zufällig eine bestimmte Ressource (HTML/CSS/JS-Datei) nicht aktualisieren, obwohl jede mögliche App gelöscht und gelöscht wurde Safari-Cache und -Verlauf, Neustart, Neustart der WLAN-Verbindung, Aktualisieren oder Entfernen der manifest feilen oder das Gerät in eine Mikrowelle stellen; selbst der Einsatz eines Vorschlaghammers erwies sich als zwecklos.

Ich habe zwar keinen “koscheren” Weg gefunden, das Problem zu beheben, aber es gibt immer eine Problemumgehung – umbenennen die Ressource.

Ändern Sie einfach den Namen der nicht aktualisierten Datei. Wenn Sie ein Problem haben mit, sagen wir, foobar.js nicht aktualisieren, umbenennen in foobar2.js und aktualisieren Sie die Referenzen zu dieser Ressource in anderen Dateien. Das kann natürlich schmerzhaft sein Weißt du was (insbesondere wenn Sie nach einer Woche Entwicklung bei foobar12.js), aber bis wir einen offiziellen Fix für iOS oder eine funktionierende Aktualisierungstechnik sehen, ist dies die einzige Möglichkeit, die ich kenne, um es zum Laufen zu bringen.

  • Würde dies auch mit der letzten Version von Safari für Windows funktionieren?

    – Chamberlainpi

    28. Mai 2015 um 18:11 Uhr

  • Dies ist die einzige Lösung, die bei der Verwendung einer AngularJS-Vollbild-Web-App auf dem iPad für mich funktioniert hat.

    – dk80

    31. Mai 2016 um 16:10 Uhr

Benutzer-Avatar
Sommer

Das Aus- und Einschalten des iPad funktioniert bei mir – zumindest unter iOS 5. Nicht vollständig ausgeschaltet. Verwenden Sie einfach die Schlaftaste oben am iPad und dann die Home-Taste, um es wieder einzuschalten. Das Anhängen einer Versionsnummer am Ende von Dateien funktioniert auch, aber das wird ziemlich mühsam.

1143140cookie-checkMobile Web App löscht den Cache nicht richtig

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy