Firefox扩展:从侧边栏访问主文档

时间:2015-02-19 00:50:12

标签: javascript firefox-addon

我是编写Firefox扩展程序的新手,我正在尝试创建一个侧边栏,用于搜索主文档中的某些元素,并在侧边栏中显示有关它们的信息。我按照here的说明创建了没有问题的侧边栏。

我现在遇到的问题是访问sidebar.js文件中的主窗口或文档。

文档here说要使用

var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                   .getInterface(Components.interfaces.nsIWebNavigation)
                   .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
                   .rootTreeItem
                   .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                   .getInterface(Components.interfaces.nsIDOMWindow);

但是这给了我这个错误:

  

TypeError:window.QueryInterface不是函数

我收到了警告:

  

不推荐使用Components对象。它很快就会被移除。

这让我觉得即使上面的代码对我有用,也不是最好的方法。

3 个答案:

答案 0 :(得分:1)

错误消息表明您的代码在无特权的javascript上下文中运行。 .QueryInterface()是XPCOM代码,即访问仅适用于特权代码的内部浏览器组件。

通常不建议使用叶子内容" (由插件产生的窗口/侧边栏)可以直接控制。相反,您的插件主代码应该协调各个视图。你的侧边栏应该是愚蠢的,只需将消息传递给插件代码,然后插件就可以修改选项卡的内容。

由于e10s浏览器的各个部分将来可能会在不同的进程中运行,并且无法直接相互访问。

如果您没有使用addon-sdk进行开发 - 这是设计时将消息传递作为将组件粘合在一起的主要方式 - 您必须使用message manager连接您的插件,侧边栏和内容脚本在一起。

答案 1 :(得分:0)

按以下方式使用tabs.create() | MDN

browser.tabs.create({url:"https://www.google.com"});

我也使用了该文档,也遇到了该错误。该文档太旧了。

答案 2 :(得分:0)

browser.tabs.create({url:“ https://www.google.com”}) 会很好