javascript – tabbrowser,浏览器,gBrowser有什么区别?

在开发Firefox扩展时,
我一直在看这些术语相当一段时间,我觉得他们真的很混乱.

看看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&gt ;.所以如果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

看看code of tabbrowser.xul

<property name="contentDocument"
   onget="return this.mCurrentBrowser.contentDocument;"
   readonly="true"/>

我希望这是自我解释:).这可能没有意义,但在代码中非常方便.如果这个属性被命名为activeContentDocument,那么这个名字就更容易理解了.

MXR非常方便地找到这些问题的答案.

窗口对象

<browser> code

<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元素.

相关文章

事件冒泡和事件捕获 起因:今天在封装一个bind函数的时候,发现el.addEventListener函数支持第三个参数...
js小数运算会出现精度问题 js number类型 JS 数字类型只有number类型,number类型相当于其他强类型语言...
什么是跨域 跨域 : 广义的跨域包含一下内容 : 1.资源跳转(链接跳转,重定向跳转,表单提交) 2.资源...
@ &quot;TOC&quot; 常见对base64的认知(不完全正确) 首先对base64常见的认知,也是须知的必须有...
搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : 的缩写,说都能直接说出来 :模型, :视图, :视图模...
首先我们需要一个html代码的框架如下: 我们的目的是实现ul中的内容进行横向的一点一点滚动。ul中的内容...