1

我正在开展一个教授 JavaScript 技术的项目(例如 Code Academy)。我这样做主要是为了自学。

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

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);
}

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

4

1 回答 1

2

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

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

于 2013-08-08T20:32:32.543 回答