我们有一个相当古老的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。看起来垫片在这种情况下不起作用。这是一个错误,还是设计?
由于
答案 0 :(得分:0)
您的sandboxPrototype错误,您将其设置为nsIDOMWindow
,将其设置为aNSIDOMWindow.gBrowser.tabContainer.childNodes[tab_index_goes_here].contentWindow
这里也是如何在脚本中加载文件而不是evalInSandbox: