Firefox 电解兼容性';不要使用evalInSandbox
我们有一个相当老的XUL扩展,我们想确保它与电解一起工作。我们最终会将其迁移到WebExtensionsAPI,但目前我们希望使用兼容性垫片 我们可以访问一些脚本(例如,覆盖脚本)中的内容(例如,使用window.content)。但是,我们的扩展还使用evalInSandbox加载一些脚本。它看起来像这样:Firefox 电解兼容性';不要使用evalInSandbox,firefox,firefox-addon,xul,Firefox,Firefox Addon,Xul,我们有一个相当老的XUL扩展,我们想确保它与电解一起工作。我们最终会将其迁移到WebExtensionsAPI,但目前我们希望使用兼容性垫片 我们可以访问一些脚本(例如,覆盖脚本)中的内容(例如,使用window.content)。但是,我们的扩展还使用evalInSandbox加载一些脚本。它看起来像这样: var sandbox = Components.utils.Sandbox(Components.classes["@mozilla.org/systemprincipal;1"].cr
var sandbox = Components.utils.Sandbox(Components.classes["@mozilla.org/systemprincipal;1"].createInstance(Components.interfaces.nsIPrincipal), {
sandboxPrototype: window,
wantXrays: false
});
// ...
Components.utils.evalInSandbox(script, sandbox, url, 0);
我们似乎无法访问沙箱中加载的脚本上的window.content。在这种情况下,垫片似乎不起作用。这是一个bug,还是出于设计
谢谢,您的沙盒原型是错误的,您正在将其设置为
nsIDOMWindow
,将其设置为aNSIDOMWindow.gBrowser.tabContainer.childNodes[tab\u index\u goes\u here]。contentWindow
请参见mdn上的此示例:
这里还介绍了如何将脚本作为文件加载,而不是执行evalInSandbox:
您的沙盒原型错误,您正在将其设置为
nsIDOMWindow
,将其设置为aNSIDOMWindow.gBrowser.tabContainer.childNodes[tab\u index\u转到这里].contentWindow
请参见mdn上的此示例:
这里还介绍了如何将脚本作为文件加载,而不是执行evalInSandbox: