运行时代码编译

时间:2013-08-08 20:16:44

标签: javascript testing eval

我正在开发一个教授JavaScript技术的项目(如Code Academy)。主要是我这样做是出于自我教育的目的。

我在一个重要部分遇到困难: 由于整个项目是一个Web项目,用户可以直接在网站中输入他的代码。我的问题是,如何检查提交的代码是否通过了当前练习的所有测试?我的方法是评估代码并针对它运行我的单元测试。这里的问题是,如何限制eval代码的范围以及如何测试它?我已经找到了关于如何限制范围的解决方案here

function maskedEval(scr)
{
    // set up an object to serve as the context for the code
    // being evaluated. 
    var mask = {};
    // mask global properties 
    for (p in this)
        mask[p] = undefined;

    // execute script in private context
    (new Function( "with(this) { " + scr + "}")).call(mask);
}

但我没有解决方法如何针对评估的代码运行我的测试。 这是正确的方法,还是应该完全不同?

1 个答案:

答案 0 :(得分:2)

如果您在客户端运行代码,则无需限制其范围,因为它只能影响客户端。

但是,如果您在服务器端发送要评估的代码,您可能需要查看node.js的沙盒库,例如http://gf3.github.io/sandbox/(我在谷歌上发现的第一个,可能有很多更多)。