在开发Firefox扩展时,我一直在查看这些术语已经有一段时间了,我觉得它们真的让人困惑.
看看这个链接.他们browser
在很多方面都使用这个术语,尽管有这种解释,但是无人看管情境的真实差异仍然存在.
我想知道是否有人可以提供整个事情的自上而下的图片.
就像有n
不同的Firefox窗口(在OS窗口的意义上)打开一样,如何访问每个窗口的XUL内容(如地址栏,滚动条等),HTML内容以及这些术语如何进入图片?
编辑:在阅读Kashif的精彩答案并查看DOM检查员之后,我留下了以下问题:
tabbrowser
有一个叫做的财产contentDocument
.它指的是它下面的HTML文档.但是tabbrowser
可以有多个文档(在每个选项卡中).拥有一处contentDocument
房产甚至有意义tabbrowser
吗?它不应该存在browser
吗?(browser
位于tabbrowser
并且只包含一个HTML文档对象).
window
对象来自哪里?不是XUL元素,而是所有Web开发人员在chrome上下文中使用的HTML元素.直接包含HTML文档对象的那个.
要访问tab
元素(表示Firefox中打开的选项卡的UI矩形)及其上下文菜单,必须使用右边的document
present browser.xul
?他们不受影响tabbrowser
吗?这就是我从DOM检查员那里看到的.
编辑:卡希夫在他的回答中回答了所有这些.
浏览器是一个通用术语,意思是可用于浏览互联网的软件,例如Firefox,Chrome,Opera等.
巧合的是,<browser>
它也是XUL中的一个元素.它是一个可以加载网页,发出http请求并做出相应响应的组件.在firefox中,每个选项卡都与一个选项卡相关联<browser>
.
<tabbrowser>
也是XUL中的一个元素.它可以包含多个选项卡,每个选项卡都与一个选项卡关联<browser>
.所以在firefox窗口中,如果你排除工具栏,标题栏,侧边栏和插件栏,剩下的就是粗略的<tabbrowser>
如果你在扩展程序'chrome.manifest中有browser.xul的叠加层并包含一个脚本,那么叠加层将应用于每个firefox窗口,并且脚本将独立地为每个firefox窗口运行.该脚本可以访问由browser.xul定义和初始化的变量.一个这样的变量是gBrowser
指向<tabbrowser>
当前Firefox(OS)窗口.因此,每个Firefox窗口都有一个<tabbrowser>
可以使用gBrowser
覆盖脚本中的变量访问的窗口.
如果您查看文档<tabbrowser>
,它非常有用,例如添加新选项卡,查找选定的浏览器等.
firefox窗口实际上基于browser.xul.此文件包含您在firefox窗口中看到的所有元素.(例如工具栏,urlbar,标签界面等).其中一个元素是<tabbrowser>
id = content的元素.该<tabbrowser>
元素包含1个或多个面板,每个面板包含一个<browser>
.因此,如果在firefox窗口中打开3个选项卡,则会有3个<browser>
元素.
当从xul叠加层包含javascript文件时,它被称为在"chrome context"中执行.在chrome上下文中,window
指的是顶级firefox窗口并document
引用xul文档(即browser.xul)
这样的脚本可以访问XUL文档的每个元素.例如,您可以使用document.getElementById("urlbar-container")
访问当前窗口的urlbar.您应该熟悉DOM Inspector,它可以帮助您查找元素的ID并理解XUL文档.
看看tabbrowser.xul的代码:
<property name="contentDocument" onget="return this.mCurrentBrowser.contentDocument;" readonly="true"/>
我希望这是自我解释:).这可能没有意义,但在代码中非常方便.如果这个属性被命名为activeContentDocument
,那将更容易理解.
MXR非常方便找到这些问题的答案.
看<browser>
代码:
<property name="contentWindow" readonly="true" onget="return this._contentWindow || (this._contentWindow = this.docShell.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindow));"/>
但我希望其他人可以有更好的解释.
<tabbrowser>
并<tabs>
一起工作.该<tabs>
元素是你指的是含有打开的选项卡矩形什么.Dom检查员透露:
<tabbrowser id="content" tabcontainer="tabbrowser-tabs" ...
和
<tabs id="tabbrowser-tabs" tabbrowser="content" ...
所以两者都相互依赖,尽管这是两个不同的XUL元素.