Über JavaScript
In OpenSesame können Sie komplexe Experimente ausschließlich mit der grafischen Benutzeroberfläche (GUI) erstellen. Manchmal stoßen Sie jedoch auf Situationen, in denen die von der GUI bereitgestellte Funktionalität unzureichend ist. In diesen Fällen können Sie Ihrem Experiment JavaScript-Code hinzufügen.
JavaScript dient für Experimente, die in einem Browser mit OSWeb laufen. Wenn Sie Ihr Experiment auf dem Desktop ausführen müssen, müssen Sie anstelle von JavaScript Python verwenden.
Versionshinweis: Die Unterstützung für JavaScript auf dem Desktop wurde in OpenSesame 4.0 entfernt. Der Grund dafür ist, dass die JavaScript-Unterstützung auf dem Desktop unvollständig war und von den Benutzern als verwirrend empfunden wurde, ohne viel Nutzen zu bringen.
JavaScript lernen
Es gibt viele JavaScript-Tutorials online. Eine gute Ressource ist Code Academy:
JavaScript in der OpenSesame GUI
Inline_javascript Elemente
Um JavaScript-Code zu verwenden, müssen Sie ein inline_javascript-Element zu Ihrem Experiment hinzufügen. Nachdem Sie dies getan haben, wird Ihnen etwas wie Figure 1 angezeigt.
Figure 1. Das inline_javascript-Element.
Wie Sie sehen können, besteht das inline_javascript-Element aus zwei Tabs: einem für die Vorbereitungsphase und einem für die Ausführungsphase. Die Vorbereitungsphase wird zuerst ausgeführt, um die Elemente auf die zeitkritische Ausführungsphase vorzubereiten. Es ist gute Praxis, Canvas
-Objekte während der Vorbereitungsphase zu konstruieren, damit sie während der Ausführungsphase ohne Verzögerung präsentiert werden können. Dies ist jedoch nur eine Konvention; Sie können während beider Phasen beliebigen JavaScript-Code ausführen.
Für weitere Informationen zur Vorbereitungs-Ausführungs-Strategie, siehe:
Ausgabe auf die Konsole drucken
Sie können mit dem Befehl console.log()
auf die Konsole drucken:
console.log('Das wird in der Konsole angezeigt!')
Wenn Sie auf dem Desktop ausführen, erscheint die Ausgabe in der OpenSesame-Konsole (oder: Debug-Fenster). Bei der Ausführung in einem Browser erscheint die Ausgabe in der Konsolenausgabe des Browsers.
Dinge, die Sie wissen sollten
Typische Funktionen
Viele gängige Funktionen sind direkt in einem inline_javascript-Element verfügbar. Zum Beispiel:
// `Canvas()` ist eine Fabrikfunktion, die ein `Canvas`-Objekt zurückgibt
let fixdotCanvas = Canvas()
if (sometimes()) { // Manchmal ist der Fixpunkt grün
fixdotCanvas.fixdot({color: 'green'})
} else { // Manchmal ist er rot
fixdotCanvas.fixdot({color: 'red'})
}
fixdotCanvas.show()
Für eine Liste der gängigen Funktionen, siehe:
Das persistent
-Objekt: Objekte über Skripte hinweg bewahren
Versionshinweis Ab OSWeb 2.0 wird der gesamte JavaScript-Code im selben Arbeitsbereich ausgeführt und Objekte werden daher über Skripte hinweg bewahrt. Dies bedeutet, dass Sie das persistent
-Objekt nicht mehr benötigen.
Jedes inline_javascript-Element wird in seinem eigenen Arbeitsbereich ausgeführt. Dies bedeutet - und das ist anders als bei Python inline_script-Elementen! - dass Sie Variablen oder Funktionen, die Sie in einem Skript deklariert haben, nicht in einem anderen Skript verwenden können. Als Workaround können Sie Variablen oder Funktionen als Eigenschaften zum persistent
-Objekt hinzufügen, das als Behälter für Dinge dient, die Sie über Skripte hinweg bewahren möchten.
Auf diese Weise können Sie ein Canvas
in einem inline_javascript konstruieren...
persistent.myCanvas = Canvas()
persistent.myCanvas.fixdot()
.. und es in einem anderen inline_javascript anzeigen:
persistent.myCanvas.show()
Das vars
-Objekt: Zugriff auf experimentelle Variablen
Versionshinweis Ab OSWeb 2.0 sind alle experimentellen Variablen als Globale verfügbar. Das bedeutet, dass Sie das vars
-Objekt nicht mehr benötigen.
Sie können auf experimentelle Variablen über das vars
-Objekt zugreifen:
// OSWeb <= 1.4 (mit vars-Objekt)
// Abrufen einer experimentellen Variable
console.log('my_variable ist: ' + vars.my_variable)
// Setzen einer experimentellen Variable
vars.my_variable = 'my_value'
// OSWeb >= 2.0 (ohne vars-Objekt)
// Abrufen einer experimentellen Variable
console.log('my_variable ist: ' + my_variable)
// Setzen einer experimentellen Variable
var my_variable = 'my_value'
Das pool
-Objekt: Zugriff auf den Dateipool
Sie greifen auf 'Dateien' aus dem Dateipool über das pool
-Objekt zu. Am offensichtlichsten ist die Verwendung davon, um CSV-Dateien, z. B. mit experimentellen Bedingungen, mit der csv-parse
-Bibliothek (unten näher beschrieben) aus dem Dateipool zu parsen.
const conditions = csvParse(
pool['attentional-capture-jobs.csv'].data,
{columns: true}
)
for (const trial of conditions) {
console.log(trial.distractor)
}
Sie können auch Tondateien direkt aus dem Dateipool abspielen. Angenommen, es gibt eine Datei namens bark.ogg
im Dateipool, können Sie sie wie folgt abspielen:
pool['bark.ogg'].data.play()
Die Canvas
-Klasse: Präsentation von visuellen Reizen
Die Canvas
-Klasse wird zur Präsentation von visuellen Reizen verwendet. Zum Beispiel können Sie einen Fixationspunkt wie folgt anzeigen:
let myCanvas = Canvas()
myCanvas.fixdot()
myCanvas.show()
Eine vollständige Übersicht über die Canvas
-Klasse finden Sie hier:
Verfügbare JavaScript-Bibliotheken
Die folgenden JavaScript-Bibliotheken sind standardmäßig enthalten:
- Random-Funktionen (
random-ext
) - Farbumwandlungsfunktionen (
color-convert
) - CSV-Funktionen (
csv-parse
) - Python-ähnliche Iteratoren (
pythonic
)
Zusätzliche JavaScript-Bibliotheken können Sie durch Hinzufügen von URLs zu den Bibliotheken im Feld 'Externe JavaScript-Bibliotheken' des OSWeb-Kontrollfelds einfügen.
Debugging
Siehe: