0 votes
in Datenauswertung by s228271 (110 points)

Hallo liebes SoSci Survey Team,

ich möchte nach technischer Hilfe bei einem lab.js-Crash auf iOS bitten. Im folgenden beschreibe ich mein Experiment, den genauen Fehler und meine Theorie, warum es zum Absturz kommt.

Ich habe eine lab.js-Studie in JavaScript handgeschrieben und in einen Fragebogen eingebunden (ich bin mir aber sicher, dass das gleiche Problem auch bei einem aus dem lab.js-Builder exportierten Experiment auftreten wird). Die Studie hat auf Chrome, Firefox und Safari sowohl auf Desktop- als auch auf Mobilgeräten fehlerfrei funktioniert.

Auf einem alternativen Browser für iOS (Ecosia-Browser Version 8.1.0.66 auf iOS 16.1) konnte das Experiment allerdings wegen einer Exception nicht geladen werden, der Bildschirm hing auf "Gleich geht es weiter" fest.

Ich habe den Stacktrace analysiert und herausgefunden, dass die lab.js-Variablen (z.B. "lab") nicht definiert sind. Als ich mir die serverseitig gerenderte HTML-Datei, in der das Experiment eingebettet ist, näher angesehen habe, ist mir folgendes aufgefallen:

Im src-Attribut des script-Tags werden die "&" zur Trennung der HTTP-Get-Parameter als "&" kodiert, allerdings sollten sie nach meinem Verständnis als "&" oder "%26" kodiert werden. Meine Vermutung ist, dass Chrome, Firefox und Safari erkennen, dass das & ein "&" in der URL darstellen soll. Es ist allerdings sehr gut möglich, dass z.B. ältere Versionen von WebKit die URL falsch lesen, eine 404 anstelle des Skripts zurückbekommen und die lab.js-Variablen deswegen nicht definiert sind.

Ich habe mein Experiment so modifiziert, dass es aus dem DOM alle script-Tags extrahiert, die "&" durch "&" ersetzt und das entsprechende Script nachlädt, bevor das Experiment gestartet wird. Damit konnte ich den Absturz beheben, das Experiment hat in allen Browsern, in denen es vorher funktioniert hat sowie in dem Browser, wo es abgestürzt hat, fehlerfrei funktioniert.
Allerdings wäre es aus meiner Sicht besser, das Problem serverseitig zu lösen, als durch DOM-Modifikation. Vermutlich muss nur der Code, der die script-Tags zusammensetzt, geändert werden.

Können Sie die Anfrage an das Entwicklerteam weiterleiten? Ich stehe gerne auch für Rückfragen zur Verfügung.
Vielen Dank und freundliche Grüße!

1 Answer

0 votes
by SoSci Survey (308k points)

Auf einem alternativen Browser für iOS (Ecosia-Browser Version 8.1.0.66 auf iOS 16.1) konnte das Experiment allerdings wegen einer Exception nicht geladen werden

Vermutlich wäre es sinnvoll nachzuverfolgen, was für eine Exception das genau ist und wo sie herkommt.

Im src-Attribut des script-Tags werden die "&" zur Trennung der HTTP-Get-Parameter als "&" kodiert, allerdings sollten sie nach meinem Verständnis als "&" oder "%26" kodiert werden.

Die Zeichen <, > und & müssen laut HTML-Spezifikation als HTML-Entitäten kodiert werden, wenn sie im HTML-Code als Strings verwendet werden. Und das ist bei den Attributen der Fall. Diese Kodierung ist m.E. sachlich korrekt. Das %26 wäre das URL-Encoding, wenn man innerhalb einer URL-Parameters ein kaufmännisches Und kodieren müsste, also z.B.

name=Max%26Moritz
by s228271 (110 points)
Die genaue Fehlermeldung war:
"Reference Error: Can't find variable: lab"
in der Code-Zeile:
"const store = new lab.data.Store();"
Die Zeile war die erste Verwendung von lab.js im Script.
Deswegen war meine Theorie, dass das lab.js-Library-Script nicht geladen wird.
Ich habe leider kein iPhone und kann nicht selbst testen, ich habe den Stacktrace über Umwege bekommen. Ich habe deswegen vermutet, dass die falsche URL angefragt wird und das Skript deswegen fehlt.
Als ich im Skript wie beschrieben die URL mit "&" statt "&amp;" nachgeladen habe, war lab definiert und das Experiment hat funktioniert. Deswegen hatte ich vermutet, dass der Browser die URL falsch liest. Es kann natürlich auch einen anderen Grund geben, warum das Skript nicht geladen wird.
by SoSci Survey (308k points)
Sie können, wenn Sie möchten, mal eine Pretest-URL direkt zur Seite mit dem lab.js-Experiment posten.
by s228271 (110 points)
Hier ist ein Link: https://www.soscisurvey.de/test339754/
Die Studie ist leer bis auf das lab.js-Experiment.
In Browsern, wo die Exception auftritt, hängt die Seite bei "Gleich geht es weiter" und es erscheint sofort ein alert mit der Fehlermeldung, Stacktrace und anderen Informationen.
Ansonsten erscheint eine einführende Seite zum Experiment.

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...