电解兼容垫片不适用于evalInSandbox

时间:2015-09-09 15:36:51

标签: firefox firefox-addon xul

我们有一个相当古老的XUL扩展,我们希望确保与Electrolysis一起使用。我们最终将它迁移到WebExtensions API,但是现在我们想要使用兼容性垫片。

我们可以在一些脚本中访问内容(例如使用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。看起来垫片在这种情况下不起作用。这是一个错误,还是设计?

由于

1 个答案:

答案 0 :(得分:0)

您的sandboxPrototype错误,您将其设置为nsIDOMWindow,将其设置为aNSIDOMWindow.gBrowser.tabContainer.childNodes[tab_index_goes_here].contentWindow

在mdn:https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Language_Bindings/Components.utils.Sandbox#Example

上查看此示例

这里也是如何在脚本中加载文件而不是evalInSandbox:

https://github.com/Noitidart/modtools