我正在开发一个教授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);
}
但我没有解决方法如何针对评估的代码运行我的测试。 这是正确的方法,还是应该完全不同?
答案 0 :(得分:2)
如果您在客户端运行代码,则无需限制其范围,因为它只能影响客户端。
但是,如果您在服务器端发送要评估的代码,您可能需要查看node.js的沙盒库,例如http://gf3.github.io/sandbox/(我在谷歌上发现的第一个,可能有很多更多)。