Ich habe eine Web-App, die scheinbar einen iOS8-Bug in Safari auslöst, und ich suche nach Hinweisen darauf, was es ausrichtet und wie man es umgehen kann.
Der Fehler ist gekennzeichnet durch "Ein Problem mit dieser Webseite aufgetreten, so dass es neu geladen wurde" am oberen Rand der Seite angezeigt, nachdem der Benutzer genug Zeit in Safari Navigation verbracht hat. Es sieht so aus, als würde hinter den Kulissen etwas zusammenbrechen, und Safari macht einfach einen wirklich guten Job, um sich grazil wiederherzustellen. Das Lesen des Crash-Logs ergab folgendes:
%Vor% Research hat angedeutet, dass Instanzen von translate3d
und keyframe
in den CSS-Dateien schuld sein könnten. Obwohl es die Wahrscheinlichkeit, dass der Bug sich wieder zurückbildet, zu beseitigen scheint, existiert der Bug dennoch. Ebenso scheint es zu helfen, die Größe der (sehr, sehr großen) CSS-Datei zu reduzieren, die mit den Seiten assoziiert ist, die den Fehler am wahrscheinlichsten auslösen, aber es nicht weggehen lässt.
Meine Firma wickelt eine Reihe von für Mobilgeräte optimierten Commerce-orientierten Web-Apps ab, und dies ist die einzige, die mit diesem Fehler zu kämpfen scheint; Ich habe keine Ahnung, was diese spezielle App so eine böse kleine spezielle Schneeflocke macht, aber ich würde es gerne herausfinden und korrigieren. Hat jemand irgendwelche Ideen darüber, was den Fehler auslöst und wie wir ihn umgehen können?
Ich hatte das gleiche Problem wie beschrieben. In meinem Fall kam es zu einem Absturz, wenn ein Teil der Anwendung, der wenige DOM-Elemente (d. H. Element.style.width ...) kontrollierte, abgeschlossen war. Nach Fertigstellung wurden diese Elemente absichtlich von DOM entfernt. Der Absturz trat danach ohne JS-Fehler auf. Mit try and error habe ich isoliert, welche Teile des Codes dafür verantwortlich sind und in meinem Fall hat das Kommentieren aller element.style. * Zeilen das Problem gelöst - die Anwendung stürzt nicht mehr ab. Nur Mobile Safari (iOS 7 und 8) hatte dieses Problem, andere Browser funktionierten gut.
Unerwartete Vermutung ist, dass bei der Garbage-Collection möglicherweise etwas Seltsames passiert und mit DOM-Elementen verbunden ist, die von JS gesteuert werden.
Überprüfen Sie die entsprechenden JavaScript- und CSS-Zeilen auf mögliche Syntaxverletzungen. Ein guter IDE-Editor sollte mögliche Probleme hervorheben, um diese Bemühungen zu erleichtern. Überprüfen Sie auch die generierte HTML-Seitenquelle für fehlerhafte Seiten. Seitenformatprobleme können für einige Browser zu fehlerhaftem Verhalten führen, für andere jedoch keine Probleme.
Ein anderes diagnostisches Verfahren, das versucht wird, ist das Deaktivieren oder Auskommentieren verschiedener Abschnitte von JavaScript-Code und / oder CSS-Zeilen, um zu versuchen, den Ort des Problems zu isolieren. Nehmen Sie große Abschnitte heraus, wie es möglich ist, um eine funktionale Seite zu haben, die den Fehler nicht erzeugt. Aktivieren oder deaktivieren Sie dann Zeilen, bis der Fehler zurückgegeben wird. Wiederholen Sie diesen Vorgang, bis der Problembereich zur Korrektur isoliert wurde.
Sie sollten auch die Reihenfolge ändern, in der CSS-Definitionen in der CSS-Datei "sehr, sehr groß" vorgenommen werden. Das kann zu einem anderen Verhalten auf der Seite führen, das das Problem entweder beheben oder anzeigen kann, was die Ursache des Problems ist.
Ich habe das gleiche Problem mit Safari auf iOS 8.1.3.
Tatsächlich verhält sich der Browser ein bisschen verrückt. Ich habe eine Schaltfläche zum Laden mehr in meiner App, die verdrahtet ist, um die nächsten 20 Datensätze zu laden. Manchmal, wenn Sie die Seite öffnen und auf den Link klicken, stürzt die Safari mit der Meldung "Ein Problem trat mit dieser Webseite auf, so dass sie neu geladen wurde" auf.
Nach dem Absturz und erneutem Laden stürzt es jedes Mal ab. Aber wenn es funktioniert, ist es auch stabil.
Schließlich wurde das Problem gelöst, indem die Anzahl der geladenen Datensätze auf 10 begrenzt wurde, so dass es möglicherweise etwas mit der Speichernutzung zu tun hat.
Auch dieses Problem wurde an einigen anderen Orten wie dem Hochladen von Bildern oder dem Laden einiger Daten über Ajax behoben.
Was lustiger ist, ist, dass es in Chrome unter iOS nie passiert.
Ich bin mir nicht sicher, ob es Ihnen etwas hilft, aber es ist nicht nur Ihre Anwendung. Wenn Apple nicht zusammenarbeitet und einen stabilen Browser veröffentlicht, können wir nur versuchen, einige Einschränkungen zu umgehen.
Tags und Links javascript css mobile-safari ios8 safari