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()
。
我使用 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()
。