0 votes
in SoSci Survey (dt.) by s027585 (150 points)

Liebes Soscisurvey-Team,

aufgrund der Corona-Situation möchten wir nun nicht mehr nur Fragebögen online erheben, sondern auch Experimente online durchführen. Hierzu möchten wir das bewährte SosciSurvey mit dem lab.js Experimenttool verbinden. Das lab.js-Tool (liegt derzeit zum Testen noch auf meinem privaten Webspace) habe ich bereits erfolgreich via iframe in eine Fragebogenseite von Soscisurvey integriert. Der nächste Schritt wäre die Implementierung der Übernahme der Daten aus dem lab.js-Programm in die Soscisurvey Software. Dafür ist etwas php-Code nötig. Leider erhalte ich dabei die folgenden Fehlermeldungen:

Warnung: Das PHP Konstrukt const darf im PHP-Code nicht verwendet werden.

Warnung: Der PHP-Code enthält Funktionen oder PHP-Elemente, die nicht für die Verwendung im Fragebogen freigegeben wurden. Falls Sie der Meinung sind, dass die monierten Konstrukte ungefährlich sind, setzen Sie sich bitte mit dem Administrator in Kontakt!

<script>
  // Listen for the study sending data
  window.addEventListener('message', function _labjs_data_handler(event) {
    // Make sure that the event is from lab.js, then ...
    if (event.data.type === 'labjs.data') {
      // ... extract the data lab.js is sending.

      // The collected data is available via:
      // - event.data.json for json-encoded data
      // - event.data.csv for csv-formatted data
      // - event.data.raw for the raw data array
      const data = event.data.csv

      // ... process data and submit page
      // (the specific code here will depend on the tool
      // you're using to process and store the data)
      // ...

      // ... finally, stop listening for further data
      window.removeEventListener('message', _labjs_data_handler)
    }
  })
</script>

Hier der Link zu lab.js: https://labjs.readthedocs.io/en/latest/learn/deploy/3-third-party.html

Ist es möglich, die nötigen und bisher gesperrten Befehle freizuschalten? Wenn ja, dann würde es uns sehr helfen. Vielen Dank!

1 Answer

0 votes
by SoSci Survey (305k points)

Das was Sie da haben ist JavaScript-Code - kein PHP-Code.

Ziehen Sie bitte ein Element "HTML-Code" von rechts in den Fragebogen, und fügen sie den Code dort ein. Oder noch besser: Speichern Sie den Code als Text (Darstellung: HTML-Code) im Fragenkatalog und ziehen Sie diesen Text in die Seite.

by s027585 (150 points)
Vielen Dank für die rasche Antwort. Die Fehlermeldungen konnte ich so eliminieren. Mir ist es trotz einiger Versuche jedoch leider nicht gelungen, die Daten einer Variable des Scripts in ein hidden field des Fragebogens zu schreiben und anschließend automatisch abzusenden. Vielleicht haben Sie auch hierfür den richtigen Einfall? Vielen Dank!


<script>
  // Listen for the study sending data
  window.addEventListener('message', function _labjs_data_handler(event) {
    // Make sure that the event is from lab.js, then ...
    if (event.data.type === 'labjs.data') {
      // ... extract the data lab.js is sending.

      // The collected data is available via:
      // - event.data.json for json-encoded data
      // - event.data.csv for csv-formatted data
      // - event.data.raw for the raw data array
      const data = event.data.json

      // ... process data and submit page
      // (the specific code here will depend on the tool
      // you're using to process and store the data)
      // ...
document.getElementById("LA01_01").value(data);
SoSciTools.submitPage()
      // ... finally, stop listening for further data
      window.removeEventListener('message', _labjs_data_handler)
    }
  })
</script>







Es geht um diese Zeilen:
document.getElementById("LA01_01").value(data);
SoSciTools.submitPage()

Das hidden Field LA01_01 habe ich über dem o.g. Code platziert.
by SoSci Survey (305k points)
Es müsste wie folgt aussehen:

document.getElementById("LA01_01").value = data;

value ist eine Eigenschaft, keine Funktion. Daher muss es diese Schreibweise sein. Außerdem würden ein paar Strichpunkte in den beiden folgenden Zeilen nicht schaden.
by s100759 (100 points)
Leider werden auch mit value = data keine Daten aus dem Experiment in den Fragebogen übernommen.
Haben Sie noch eine weitere Idee, woran das liegen könnte?
by SoSci Survey (305k points)
Die anderen Änderungen (HTML/PHP Code) haben Sie vorgenommen? Wenn ja, dann werfen Sie bitte einmal einen Blick in die JavaScript-Fehlerkonsole Ihres Browsers.

Gerne können Sie auch einen Pretest-Link direkt (!) zur betroffenen Seite posten, dann werden wir einmal einen Blick darauf.
by s100759 (100 points)
Ja, der Code steht in einem HTML-Element.
Hier der Link zum Pretest: https://www.soscisurvey.de/prestudy_foodstimuli/?act=t40Aip5v0n9al5mKxZy6CT0z
by SoSci Survey (305k points)
Fein, die Konsole zeigt zumindest keine Fehler an. Dann schauen wir mal im Detail...

Sie scheinen Inhalte via <iframe> eingebunden zu haben. Das kann man machen, man muss sich dabei aber bewusst sein, dass Browser die Kommunikation zwischen der Fragebogen-Seite und dem iFrame-Inhalt (Cross-Site-Scripting) i.d.R. blockieren.

Meine erste Vermutung wäre daher, dass Ihr Event-Handler überhaupt nicht aufgerufen wird:

window.addEventListener('message', function _labjs_data_handler(event) {

Schreiben Sie hier in die nächste Zeile vielleicht als erste mal:

console.log("Handler aufgerufen");

Solange nichts in der Browser-Konsole erscheint, liegt das Problem daran, dass die Funktion nicht aufgerufen wird. Das ist dann aber entweder ein Problem mit iFrames (wobei ich diesbezüglich keine Warnung im Browser sehe) oder bei der Anwendung des externen Scripts (das ich jetzt nicht weiter im Detail analysiert habe).
by s100759 (100 points)
Ja, das Experiment wird über ein iframe aufgerufen (s.u.) und läuft ja auch erstmal gut. In der Tat werden die darauffolgenden Funktionen aber derzeit wohl nicht aufgerufen. Gibt es denn eine Alternative zur iframe Einbettung?

<iframe
    src="https://.../"
    name = "LJ01_01"
    style = "width: 800px; height: 600px"; frameborder:none;
></iframe>
by SoSci Survey (305k points)
Am sichersten wäre es vermutlich, das Script herunterzuladen und über die "Bilder und Mediendateien" Funktion direkt in SoSci Survey in Ihre Befragungsprojekt hochzuladen.
by s085674 (110 points)
Ich versuche ebenfalls innerhalb von SoSci Survey ein Experiment von lab.js zu integrieren. Ich habe jetzt die .js Datei in den Mediendateien hochgeladen. Wie genau könnte ich diese denn nun zum Befragungsprojekt hinzufügen?
by SoSci Survey (305k points)
Die Einbindung eines JavaScripts erfolgt mit dem HTML-Code

<script type="text/javascript" src="lab.js"></script>

Damit ist es in die Seite eingebunden. Alles weitere gerne in einer neuen Frage hier im Online-Support. Die Kommentare bitte nicht über-beanspruchen, sonst findet man die relevanten Informationen nicht mehr :)

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

...