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