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

 ya的sky 发布于 2023-02-08 12:24

在开发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矩形)及其上下文菜单,必须使用右边的documentpresent browser.xul?他们不受影响tabbrowser吗?这就是我从DOM检查员那里看到的.

编辑:卡希夫在他的回答中回答了所有这些.

1 个回答
  • 浏览器

    浏览器是一个通用术语,意思是可用于浏览互联网的软件,例如Firefox,Chrome,Opera等.

    巧合的是,<browser>它也是XUL中的一个元素.它是一个可以加载网页,发出http请求并做出相应响应的组件.在firefox中,每个选项卡都与一个选项卡相关联<browser>.

    <tabbrowser>和gBrowser

    <tabbrowser>也是XUL中的一个元素.它可以包含多个选项卡,每个选项卡都与一个选项卡关联<browser>.所以在firefox窗口中,如果你排除工具栏,标题栏,侧边栏和插件栏,剩下的就是粗略的<tabbrowser>

    如果你在扩展程序'chrome.manifest中有browser.xul的叠加层并包含一个脚本,那么叠加层将应用于每个firefox窗口,并且脚本将独立地为每个firefox窗口运行.该脚本可以访问由browser.xul定义和初始化的变量.一个这样的变量是gBrowser指向<tabbrowser>当前Firefox(OS)窗口.因此,每个Firefox窗口都有一个<tabbrowser>可以使用gBrowser覆盖脚本中的变量访问的窗口.

    如果您查看文档<tabbrowser>,它非常有用,例如添加新选项卡,查找选定的浏览器等.

    Firefox窗口

    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文档.

    tabbbrowser中的contentDocument

    看看tabbrowser.xul的代码:

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

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

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

    window对象:

    <browser>代码:

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

    2023-02-08 12:27 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有