在沙盒中执行eval时缺少窗口中定义的类

Missing classes defined in window when eval in Sandbox

本文关键字:窗口 定义 执行 eval      更新时间:2023-09-26

我有一个问题,试图评估一些源代码在沙箱。我向窗口(DOM)对象添加了一些类,我真的需要将这些类包含在Sandbox中。如:

window.BaseClass = function(){this.someProperty = "bla bla";}
...
var ctx = new Components.utils.Sandbox(window);
    ctx.BaseClass = BaseClass; //This is neccesary
var src = "function SubClass(){}; SubClass.prototype = new BaseClass();";
var evaluation = Components.utils.evalInSandbox(src, ctx);
var res = new evaluation[className];
alert(res);

问题是这些新类并不总是相同的,所以我不能总是只使用ctx.BaseClass = BaseClass;。那么有没有一种方法包括在沙盒所有类窗口已定义?

我试图从evalInSandbox结果中获得新类。这就是问题所在:我必须从上下文中执行:

Components.utils.evalInSandbox(src, ctx);
var res = new ctx[className];