OpenSesame
Rapunzel Code Editor
DataMatrix
Support forum
Python Tutorials
MindProbe
OpenSesame videos
Python videos
Supported by

Über JavaScript

In OpenSesame können Sie komplexe Experimente allein über die grafische Benutzeroberfläche (GUI) erstellen. Aber manchmal stoßen Sie auf Situationen, in denen die Funktionalität der GUI nicht ausreicht. In diesen Fällen können Sie JavaScript-Code zu Ihrem Experiment hinzufügen.

JavaScript ist für Experimente gedacht, die in einem Browser mit OSWeb laufen. Wenn Sie Ihr Experiment auf dem Desktop ausführen müssen, sollten Sie Python anstatt JavaScript verwenden.

Versionshinweis: Die Desktopunterstützung für JavaScript wurde in OpenSesame 4.0 entfernt. Dies liegt daran, dass die JavaScript-Unterstützung auf dem Desktop unvollständig war und von den Benutzern als verwirrend empfunden wurde, ohne einen großen Mehrwert zu bieten.

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, werden Sie etwas Ähnliches wie Figure 1 sehen.

/pages/de/manual/javascript/img/about/inline-javascript.png

Figure 1. Das Inline_javascript-Element.

Wie Sie sehen können, besteht das Inline_javascript-Element aus zwei Tabs: einem für die Prepare-Phase und einem für die Run-Phase. Die Prepare-Phase wird zuerst ausgeführt, sodass die Elemente sich auf die zeitkritische Run-Phase vorbereiten können. Es ist eine gute Praxis, Canvas-Objekte während der Prepare-Phase zu erstellen, sodass sie ohne Verzögerung während der Run-Phase präsentiert werden können. Aber das ist nur eine Konvention; Sie können beliebigen JavaScript-Code während beider Phasen ausführen.

Für mehr Informationen über die Prepare-Run-Strategie, siehe:

Ausgabe in die Konsole drucken

Sie können mit dem Befehl console.log() in die Konsole drucken:

console.log('Dies wird in der Konsole erscheinen!')

Wenn das Experiment auf dem Desktop läuft, erscheint die Ausgabe in der OpenSesame-Konsole (oder: Debug-Fenster). Wenn es in einem Browser läuft, erscheint die Ausgabe in der Browser-Konsole.

Wissenswertes

Häufige Funktionen

Viele häufig verwendete Funktionen stehen direkt in einem Inline_javascript-Element zur Verfügung. Zum Beispiel:

// `Canvas()` ist eine Factory-Funktion, 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 häufig verwendeter Funktionen, siehe:

Variablen deklarieren (let und var)

Inline_javascript-Elemente werden im Non-Strict-Modus (oder: Sloppy-Modus) ausgeführt. Das bedeutet, dass Sie einer Variablen, die nicht explizit deklariert wurde, einen Wert zuweisen können. Wenn Sie das tun, wird die Variable implizit mit var deklariert, falls sie nicht bereits deklariert wurde.

my_variable = 'mein Wert'  // implizit deklariert mit var

Variablen, die implizit oder explizit mit var deklariert werden, sind global, was hauptsächlich bedeutet, dass sie von einem Logger protokolliert werden können. Variablen, die mit let deklariert werden, sind nicht global, was hauptsächlich bedeutet, dass sie nicht von einem Logger protokolliert werden.

this_is_a_global_variable = 'mein Wert'
var this_is_also_a_global_variable = 'mein Wert'
let this_is_not_a_global_variable = 'mein Wert'

Das persistent-Objekt: Objekte über Skripte hinweg erhalten

Versionshinweis Ab OSWeb 2.0 wird aller JavaScript-Code im selben Arbeitsbereich ausgeführt und Objekte werden daher über Skripte hinweg erhalten. Das bedeutet, dass Sie das persistent-Objekt nicht mehr benötigen.

Jedes inline_javascript-Element wird in seinem eigenen Arbeitsbereich ausgeführt. Das bedeutet – und das ist anders als bei Python inline_script-Elementen! –, dass Sie keine Variablen oder Funktionen verwenden können, die Sie in einem Skript deklariert haben, in einem anderen Skript. Um das Problem zu umgehen, können Sie Variablen oder Funktionen als Eigenschaften an das persistent-Objekt anhängen, das als Behälter für Dinge dient, die Sie zwischen Skripten erhalten möchten.

So 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)
// Eine experimentelle Variable erhalten
console.log('my_variable ist: ' + vars.my_variable)
// Eine experimentelle Variable setzen
vars.my_variable = 'my_value'

// OSWeb >= 2.0 (ohne vars-Objekt)
// Eine experimentelle Variable erhalten
console.log('my_variable ist: ' + my_variable)
// Eine experimentelle Variable setzen
my_variable = 'my_value'

Das pool-Objekt: Zugriff auf den Dateipool

Sie greifen über das pool-Objekt auf 'Dateien' aus dem Dateipool zu. Die offensichtlichste Verwendung dafür ist das Parsen von CSV-Dateien, zum Beispiel mit experimentellen Bedingungen, aus dem Dateipool mit Hilfe der csv-parse-Bibliothek (weiter unten detaillierter beschrieben).

const conditions = csvParse(
    pool['attentional-capture-jobs.csv'].data,
    {columns: true}
)
for (const trial of conditions) {
    console.log(trial.distractor)
}

Sie können auch direkt Sounddateien aus dem Dateipool abspielen. Angenommen, im Dateipool befindet sich eine Datei namens bark.ogg, können Sie sie folgendermaßen abspielen:

pool['bark.ogg'].data.play()

Die Canvas-Klasse: Präsentation visueller Stimuli

Die Canvas-Klasse wird verwendet, um visuelle Stimuli zu präsentieren. Zum Beispiel können Sie so einen Fixationspunkt zeigen:

let myCanvas = Canvas()
myCanvas.fixdot()
myCanvas.show()

Einen vollständigen Überblick über die Canvas-Klasse finden Sie hier:

Verfügbar JavaScript-Bibliotheken

Die folgenden JavaScript-Bibliotheken sind standardmäßig enthalten:

Sie können zusätzliche JavaScript-Bibliotheken einbinden, indem Sie URLs zu den Bibliotheken im Feld 'Externe JavaScript-Bibliotheken' des OSWeb-Kontrollfelds eingeben.

Debugging

Siehe:

Supported by