Ich habe eine Web-App erstellt und meinem iPhone-Startbildschirm hinzugefügt. Wenn ich zu einer anderen App und zurück wechsle, lädt das iPhone meine Web-App automatisch neu. Dies unterbricht meinen App-Flow.
Wie verhindere ich, dass das iPhone die App neu lädt?
Ich habe ein Apple-Mobile-Web-App-fähiges Meta-Tag aktiviert, um die Safari-Symbolleiste auszublenden, und ich möchte es nicht deaktivieren.
Antworten:
Ich habe gerade diese verwandte Frage zu SO gefunden: Verhindern Sie, dass sich die native Web-App beim Öffnen unter iOS neu lädt
Da es sich anscheinend um eine Einschränkung von Safari handelt, besteht eine vorgeschlagene Lösung darin, den Status Ihrer Webanwendungen mithilfe von Javascript und HTML5 localStorage beizubehalten. Überprüfen Sie beim Starten Ihrer Web-App den dauerhaften Status und laden Sie ihn, falls verfügbar.
Informationen zur Verwendung von localStorage in Safari finden Sie hier: http://developer.apple.com/library/safari/#documentation/iPhone/Conceptual/SafariJSDatabaseGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007256-CH1 -SW1
Hoffe das hilft dir. Zumindest für mich, da ich das gleiche Problem hatte wie Sie. :-)
quelle
Ich habe einen Hack gefunden, im
iOS 11.4.1/12.0
Fenster zum Hochladen von Dateien geöffnet und dann wieder zum Startbildschirm gewechselt.
Die App funktioniert weiterhin, in meinem Fall wird Audio abgespielt und
localStorage
aktualisiertBeweise: https://youtu.be/heehLUhGKYY
PS. Beachten Sie, wie sich der Fortschritt des Songs ändert, wenn wir suchen. Dies zeigt, dass die App im Hintergrund funktioniert
quelle
Die kurze Antwort ist, dass Sie dies nicht kontrollieren können. Manchmal hält iOS eine Web-App im Hintergrund aktiv, manchmal wird sie beendet. Es hängt ganz davon ab, wie viel Speicher auf dem Gerät verfügbar ist.
Ihr bester Ansatz ist es also, die Probleme zu minimieren, die durch dieses Neuladen entstehen. Stellen Sie sicher, dass Ihre Webanwendung die URL aktualisiert, wenn Sie von Ansicht zu Ansicht wechseln, indem Sie sie ändern
location.hash
oder verwendenhistory.pushState()
. Auf diese Weise können Sie die Ansicht neu laden, in der sich der Benutzer befand, bevor er die Apps wechselte. Es gibtpagehide
undpageshow
Ereignisse , die Ihnen erlauben , Code auszuführen , wenn der Benutzer sich von der App entfernt - diese Gelegenheit nutzen , lokale Zustand in localstorage zu speichern und / oder IndexedDB, holen dann wieder , dass die Daten , wenn die Webapp wieder geöffnet wird.quelle
Update: Da diese Antwort negative Stimmen erhält, habe ich diese Erklärung hinzugefügt.
Ihr Problem ist möglicherweise nicht das tatsächliche Neuladen, sondern die Tatsache, dass Mobile Safari den Cache und die Cookies Ihres Benutzers anders behandelt, wenn Ihre Webanwendung über den Browser geöffnet wird, als wenn sie als Webanwendung auf dem Startbildschirm "installiert" wird. Obwohl die hier vorgeschlagenen Lösungen, die localStorage verwenden, funktionieren, sind sie eine Menge Arbeit für die clientseitige Logik, die vermieden werden kann, wenn Ihr Server bereits dafür verantwortlich ist, den Sitzungsstatus Ihres Benutzers beizubehalten. Die 30-Sekunden-Lösung besteht darin, das Sitzungscookie einfach explizit auf eine längere Lebensdauer festzulegen.
Auf diese Weise können Sie den Status auch zwischen Neustarts des Geräts beibehalten. Auch wenn dies technisch nicht verhindert, dass die Web-App beim Start vom Startbildschirm aus neu geladen wird, ist dies eine einfache Möglichkeit, den Status für den Benutzer ohne ihn wiederherzustellen. Sie bemerkt das Nachladen - was in vielen Fällen, wie ich vermute, das eigentliche Problem ist.
Für eine ausführlichere Diskussion dieser Strategie und Codebeispiele werfen Sie einen Blick auf diese Fragen und meine Antworten dort:
Pflegen Sie die PHP-Sitzung in der Web-App auf dem iPhone
iPhone "Bookmark to Homescreen" entfernt Cookies und Sitzung?
quelle