Firefox 电解兼容性';不要使用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

我们有一个相当老的XUL扩展,我们想确保它与电解一起工作。我们最终会将其迁移到WebExtensionsAPI,但目前我们希望使用兼容性垫片

我们可以访问一些脚本(例如,覆盖脚本)中的内容(例如,使用window.content)。但是,我们的扩展还使用evalInSandbox加载一些脚本。它看起来像这样:

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: