关于JavaScript
在OpenSesame中,您可以仅通过图形用户界面(GUI)创建复杂的实验。但是,您有时会遇到GUI提供的功能不足的情况。在这些情况下,您可以向您的实验中添加JavaScript代码。
JavaScript适用于在带有OSWeb的浏览器中运行的实验。如果你需要在桌面上运行你的实验,你需要用Python代替JavaScript。
__版本说明:__在OpeSesame 4.0中删除了对桌面JavaScript的支持。这是因为桌面对JavaScript的支持不完整,用户认为该功能并未带来太多帮助的同时却感到混乱。
学习JavaScript
在线上有许多JavaScript教程可供参考。一个不错的资源是Code Academy:
在OpenSesame GUI中的JavaScript
Inline_javascript 项目
要使用JavaScript代码,您需要在您的实验中添加一个inline_javascript项目。完成此操作后,您会看到像Figure 1这样的内容。
Figure 1. 这就是inline_javascript项目.
如你所见,inline_javascript项目由两个选项卡组成:一个用于Prepare阶段,一个用于Run阶段。Prepare阶段先被执行,以便项目准备有关任务的关键运行阶段。在Prepare阶段 创建Canvas
对象是一个好的习惯,这样他们就可以在Run阶段毫无延迟地被呈现。但这只是个习惯,你可以在这两个阶段执行任意的JavaScript代码。
有关 prepare-run 策略的更多信息,请见:
命令控制台中的输出
您可以使用 console.log()
命令打印到命令控制台:
console.log('This will appear in the console!')
在桌面上运行时,输出将出现在OpenSesame 控制台(或:debug 窗口)。在浏览器中运行时,输出将出现在浏览器的命令控制台。
应当知道的内容
常用函数
许多常用函数可以直接在inline_javascript项目中使用。例如:
// `Canvas()`是返回`Canvas`对象的工厂函数
let fixdotCanvas = Canvas()
if (sometimes()) { // 有时候小圆点是绿色的
fixdotCanvas.fixdot({color: 'green'})
} else { // 有时候小圆点是红色的
fixdotCanvas.fixdot({color: 'red'})
}
fixdotCanvas.show()
有关常用函数的列表,请参阅:
persistent
对象:在不同的脚本中保留对象
__版本注__从OSWeb 2.0开始,所有的JavaScript代码都在相同的工作空间中执行,对象因此可以在脚本之间保留。这意味着您不再需要 persistent
对象。
每个inline_javascript项目都在其自己的工作空间中执行。这意味着(这与Python inline_script项目不同!)您无法在另一个脚本中使用在一个脚本中声明的变量或函数。作为解决方法,您可以将变量或函数作为属性附加到persistent
对象上,该对象充当您希望在各个脚本中保留的东西的容器。
以这种方式,你可以在一个inline_javascript中构建一个Canvas
...
persistent.myCanvas = Canvas()
persistent.myCanvas.fixdot()
...然后在另一个inline_javascript中展示它:
persistent.myCanvas.show()
vars
对象:实验变量的访问
__版本注__从OSWeb 2.0开始,所有的实验变量都作为全局变量可以使用。这意味着你不再需要vars
对象。
你可以通过vars
对象访问实验变量:
// OSWeb <= 1.4 (带有 vars 对象)
// 获取实验变量
console.log('my_variable是:' + vars.my_variable)
// 设置实验变量
vars.my_variable = 'my_value'
// OSWeb >= 2.0 (无vars 对象)
// 获取实验变量
console.log('my_variable是:' + my_variable)
// 设置实验变量
var my_variable = 'my_value'
pool
对象:访问文件池
您可以通过 pool
对象从文件池中访问'files'。其最明显的用途是使用 csv-parse
库(下面将更详细地描述)解析来自文件池的 CSV 文件,例如带有实验条件的文件。
const conditions = csvParse(
pool['attentional-capture-jobs.csv'].data,
{columns: true}
)
for (const trial of conditions) {
console.log(trial.distractor)
}
您还可以直接从文件池播放声音文件。假设文件池中有一个名为 bark.ogg
的文件,您可以这样播放它:
pool['bark.ogg'].data.play()
Canvas
类:呈现视觉刺激
Canvas
类用于呈现视觉刺激。例如,您可以按以下方式显示固定小点:
let myCanvas = Canvas()
myCanvas.fixdot()
myCanvas.show()
Canvas
类的完整概述可以在这里找到:
可用的 JavaScript 库
以下 JavaScript 库默认包含在内:
您可以在 OSWeb 控制面板的'外部 JavaScript'库字段中通过 URL 添加更多 JavaScript 库。
调试
参见: