我正在为非程序员创建一个API,为虚拟多人战斗机场竞技场编写第三方代码。使用全局变量的语法很好:
function Step() {
if (sensor.wall) {
movement.brake();
movement.turnLeft();
}
if (sensor.enemy) {
movement.shoot()
}
if (movement.speed < 1) {
movement.accelerate(.1);
}
}
以上示例中的全局变量为sensor
和movement
。剧本作者不关心他们来自哪里,只是他们可以访问。 (不,这不是最终语法。只是在这里进行原型设计。)
脚本将在客户端(浏览器)和服务器上运行(通过Node或Spidermonkey)。
那么,怎么做?看起来我的选择是:
eval()
设置脚本(但这很糟糕,对吗?)window
这样的DOM全局变量呢?)我可以使用Google Caja确保全局范围。我也希望这是高效的,因为很多Step()
函数将在同一台服务器上每秒运行。
答案 0 :(得分:0)
由于用户脚本是以文本形式接收的,因此我不关心对document
,window
等的访问权限(它是私有应用程序),eval()
是最好的选择。
function evaluateScript(movement, sensor, content) {
return eval(content);
}