evalInSandbox 无法在 Firefox 38 中找到函数

evalInSandbox fails to find function in Firefox 38

我使用 Components.utils.evalInSandbox 在我的 firefox 扩展中执行 js 功能。但是这个 api 在我将 firefox 升级到版本 38 后失败了。

总是报错“*** js function not defined”,好像网页上没有这个js函数。然而,现实是js功能只是在网页上。我可以从 Web 控制台执行它。

我没有发现这个 api 在 MDN 中已经过时,所以这个 api 有什么问题?

var s = Components.utils.Sandbox(document.defaultView.wrappedJSObject);
s.window = document.defaultView.wrappedJSObject;
s.document = document;
s.jsFunctionResult = null;
var javascript = "jsFunctionResult = JSFunctionName(arg1, arg2);";
Components.utils.evalInSandbox("with(window){" + javascript + "}", s);

我尝试执行警报,它还显示"alert is undefined"。

如果我没看错,您正在创建一个与文档具有相同安全主体但全局范围为空的沙箱,因此 JSFunctionName() 在沙箱的全局范围内将不可用。

我想 with() 应该可以解决这个问题,但它可能无法跨隔间边界工作。尝试将其称为 window.wrappedJSObject.JSFunctionName()