jQuery + Safari for iPhone = Parse Error?Druckversion

21.02.2012

In letzter Zeit ist in den Planungsvorgaben für die Entwicklung von Websites immer öfter die Anforderung für die Unterstützung von Safari für iPhone / iPad zu finden.

Auch einer der deutschen Stammkunden der Firma itseedbed wünschte sich, dass auf seiner neuen Website neben allem anderen der Webbrowser Safari für iPhone / iPad unterstützt werden sollte.

Nach der erfolgreichen Entwicklungsphase gingen wir zur Testphase über. Alles funktionierte einwandfrei... jedoch nicht auf dem iPhone des Kunden! Die Debugging Console zeigte einen Parserfehler an (s. Screenshot), aufgrund dessen die komplette auf jQuery basierende Oberfläche der Website nicht mehr funktionsfähig war. Wir hatten dafür keine Erklärung, zumal auf unserem iPhone alles wunderbar funktionierte. Wir suchten nach der Fehlerursache und tappten, zugegebenermaßen, erst einmal völlig im Dunkeln. Schlussendlich wurde unsere Mühe belohnt, die Lösung des Problems war gefunden.

Es stellte sich heraus, dass es weder an den vom Content Management System generierten relativen Pfaden, noch an der neuen iOS-Version (5.0.1), und nein, auch nicht an Safari für iPhone lag! Das Problem war der deutsche Mobilfunkanbieter T-Online!!! Genauer gesagt, lag es daran, wie dessen Maßnahmen zur Datenverkehrsoptimierung dem Code der jQuery-Bibliothek zugeordnet wurden.

Zusammengefasst: Der Mobilfunkanbieter versucht den Datenverkehr zu optimieren, damit die Websites auf den Mobilgeräten seiner Kunden schneller geladen werden. Eine dieser Optimierungsmaßnahmen setzt das Löschen aller Kommentare aus den js-Dateien voraus, um deren "Gewicht" zu minimieren. Offensichtlich sucht der Datenverkehrsoptimierer nach den Zeichen für den Anfang und das Ende eines Kommentars (dementsprechend /* und */) und löscht vor dem Laden der Datei alles, was sich zwischen diesen Zeichen befindet. Gleichzeitig verwendet die Bibliothek von jQuery 1.4.1 (und mit dieser Version haben wir gearbeitet) für die internen Zwecke die Zeichen */* an zwei Code-Stellen. Damit wurden die Inhalte, die sich zwischen den Paaren  */* (d.h. */* … */*) befunden haben, beim Laden der Datei auf dem Nutzergerät erfolgreich herausgeschnitten. Auf diese Weise wurden nicht die Kommentare "optimiert", sondern ein Stück des Entwicklercodes. Im Ergebnis: Die jQuery-Bibliothek verliert ihre Funktionsfähigkeit und die Website-Oberfläche wird statisch.

Wenn man diese Ursache kennt, kann das Problem leicht behoben werden. An beiden Stellen, wo die Abfolge */* aufgetreten ist, wurde sie durch ["*/"]+["*"] ersetzt. Nach dieser Korrektur funktionierte die Website auch auf dem iPhone des Kunden einwandfrei.

Nützliche Links:
http://www.mysociety.org/2011/08/11/mobile-operators-breaking-content/ – im Artikel wird das Problem erläutert und unter anderem erwähnt, dass nicht nur die Firma T-Mobile ihren Datenverkehr auf diese Wiese optimiert.
bugs.jquery.com/ticket/9969 , bugs.jquery.com/ticket/10098 – Besprechung des Problems im jQuery Bug Tracker-Forum.

Den letzten Postings im Bug Tracker-Forum zufolge kann darauf geschlossen werden, dass der Fehler immer noch auftritt. Die Nutzer der jQuery-Community empfehlen die hosted-Version der Bibliothek code.jquery.com/jquery-1.7.1.min.js.

<- Zurück zu: Technikerblog


Arbeiten

Programmmodul für die Abwicklung von Kommunalabgaben
Programmmodul für die Abwicklung von Kommunalabgaben
Das Modul wurde für eine ukrainische Bank entwickelt und ermöglicht den Bankangestellten die Abwicklung von Zahlungen für kommunale...
Webmodul zur Abgabe von Einkommensteuererklärungen über das Internet
Webmodul zur Abgabe von Einkommensteuererklärungen über das Internet
Das Modul ist Teil einer größeren Anwendung, die für die Abgabe von Einkommensteuererklärungen über das Internet bestimmt ist. Für die Gewährleistung...