Firefox 扩展:从侧边栏访问主文档
Firefox extension: Access to main document from sidebar
我是编写 Firefox 扩展的新手,我正在尝试创建一个侧边栏,用于搜索主文档中的某些元素并在侧边栏中显示有关它们的信息。我按照说明 here 创建侧边栏没有任何问题。
我现在遇到的问题是访问我的 sidebar.js 文件中的主要 window 或文档。
文档 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 is not a function
我收到警告:
The Components object is deprecated. It will soon be removed.
这让我觉得即使上面的代码对我有用它也不是最好的方法。
错误消息表明您的代码 运行 在非特权 javascript 上下文中。 .QueryInterface()
是 XPCOM 代码,即访问仅对特权代码可用的内部浏览器组件。
通常不建议 "leaf content"(windows/sidebars 由插件生成)直接控制。相反,您的插件主代码应该协调各个视图。您的侧边栏应该是愚蠢的,只需将消息传递给插件代码,插件然后修改选项卡的内容。
由于 e10s 浏览器的各个部分将来可能会 运行 在不同的进程中,并且不会相互直接访问。
如果您不使用 addon-sdk - which is designed with message-passing as its primary way of gluing components together - you will have to use the message manager 将插件、侧边栏和内容脚本连接在一起进行开发。
使用 tabs.create() | MDN 如:
browser.tabs.create({url:"https://www.google.com"});
我也使用了那个文档,但我也遇到了那个错误。文档太旧了。
browser.tabs.create({url:"https://www.google.com"})
会很好
我是编写 Firefox 扩展的新手,我正在尝试创建一个侧边栏,用于搜索主文档中的某些元素并在侧边栏中显示有关它们的信息。我按照说明 here 创建侧边栏没有任何问题。
我现在遇到的问题是访问我的 sidebar.js 文件中的主要 window 或文档。
文档 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 is not a function
我收到警告:
The Components object is deprecated. It will soon be removed.
这让我觉得即使上面的代码对我有用它也不是最好的方法。
错误消息表明您的代码 运行 在非特权 javascript 上下文中。 .QueryInterface()
是 XPCOM 代码,即访问仅对特权代码可用的内部浏览器组件。
通常不建议 "leaf content"(windows/sidebars 由插件生成)直接控制。相反,您的插件主代码应该协调各个视图。您的侧边栏应该是愚蠢的,只需将消息传递给插件代码,插件然后修改选项卡的内容。
由于 e10s 浏览器的各个部分将来可能会 运行 在不同的进程中,并且不会相互直接访问。
如果您不使用 addon-sdk - which is designed with message-passing as its primary way of gluing components together - you will have to use the message manager 将插件、侧边栏和内容脚本连接在一起进行开发。
使用 tabs.create() | MDN 如:
browser.tabs.create({url:"https://www.google.com"});
我也使用了那个文档,但我也遇到了那个错误。文档太旧了。
browser.tabs.create({url:"https://www.google.com"}) 会很好