hechengjin 发表于 2016-3-25 22:51:58

Mozilla技术架构简述 目录结构

      Mozilla系列——Mozilla技术架构简
   Mozilla的技术体系主要分成三至四个层次,见下图的方框部分:
file:///G:/%E4%B8%AA%E4%BA%BA%E6%96%87%E6%A1%A3/Articles/for_blog/mozilla.jpg
                                 
    我们从最下面一层开始讲讲吧。
    Mozilla Platform Layer:Mozilla是一个跨平台的项目,因此,在最底下,是
对各种操作系统的平台适配层,让Mozilla在各个系统平台上都能运行起来。除了对
各种OS的适配层,这一层还包括Gecko、Necko等重要的引擎和一些基本功能包。(
Gecko是图形渲染引擎,Necko是网络引擎)。这一层的开发主要用C,以及C++。
    XPCOM Layer:跨平台组件层,对底层的功能进行封装,以组件的形式供其他XPCOM
组件和上层的javascript调用。XPCOM与COM是非常类似的技术,所不同的是COM注册
的环境是windows,XPCOM注册的环境是Mozilla,另外,XPCOM还有一套自己的书写
规范。XPCOM的开发语言主要是C++;用JavaScript也可以开发XPCOM,但是用的比较少。
Mozilla已经封装了很多实用的XPCOM组件,<XPCOM Reference>这本书里面列举了几乎
所有的组件和他们的使用方法,http://xulplanet.com/references/xpcomref/,不过
这本书似乎很久没有更新了。
    Chrome Layer:chrome的英文是金属“铬”,在这里是一种协议名称,也是对Mozilla
GUI部分的总称。所有的界面应用都是在这一层,也是最丰富多彩的一层。我们平时直接
感受和接触到的都是chrome层实现出来的冬冬。界面层用XBL技术定义了很多的界面组件,
我们也可以定义自己的界面组件,这些组件供XUL使用,用来定义界面的框架结构,再
配合JavaScript、CSS、RDF等就可以创建丰富多彩的界面效果,chrome层的文件最后会
被按照模块打成jar包,放在chrome目录下。chrome层主要的开发技术是XUL/XBL、
JavaScript、CSS、RDF、DTD等。这一层的东西我在后面专门作为一个topic来说明,
这里就不多说了。
    OK,Mozilla大致就分成这样几层,每一层都使用下一层提供的功能,每一层都
可以进行扩展和开发。这是对Mozilla进行横向切割划分的层次。
    如果进行纵向切割的话,Mozilla就可以被分成一个个的模块(module),module由
一部分XPCOM加一部分chrome构成。举例来说,browser就是一个module,他由browser.jar
和底层连接网络的XPCOM组件及其他一些组件;email模块,也是由界面部分加上一些pop3
和smtp的XPCOM组件构成。这些module并不是固定死的,它们是可以进行第三方开发的,
比如现在的很多Firefox插件,就是以不同的module加入到Firefox中来的,这些Module
也体现在访问时的时候的路径上,chrome://xxxx/content/....xul,这里的xxxx就是
module的名字。
    这里顺便说一下为什么说Mozilla是一个开发平台吧。
    我的理解,所谓平台,像windows、linux这样,它们是用驱动连接硬件设备,然后
向上提供一组API或者说服务,第三方可以对这API进行重新开发形成新的API,也可以利
用这些API和和服务进行应用开发,生产出运行在这些平台上的应用软件。
    同理,将这种模式运用到mozilla上,第三方完全可以基于mozilla开发出运行在
Mozilla环境中的应用程序。这里说的mozilla环境是一个广义的概念,包括从上面说的
最低层到最上层。Mozilla是一个开源的项目,我们可以得到它的所有代码,自然我们可
以对Mozilla平台的任何一个部分进行修改(当然,必须遵循MPL<Mozilla Public License),
比如底层的平台接口、Gecko、Necko等等;我们也可以开发自己的XPCOM,注册到Mozilla
环境中去,这个类似前面说的开发自己的API的概念;我们也可以利用这些XPCOM和底层的
功能开发自己的应用程序,类似前面说的开发应用软件。
    目前,基于Mozilla项目平台开发出的比较出名的产品有:mozilla、firefox、
Macintosh平台上的 AOL、Linux 上的 Galeon,以及 Netscape。另外,Amazon的图书
搜索器也可以看成是基于mozilla平台开发出的产品。将尺度再放宽一点说,mozilla和
firefox的很多插件都可以看成是基于mozilla平台开发出的产品。
    在www.mozdev.org上有很多基于mozilla平台进行的开源项目。


Mozilla系列——Mozilla目录结构剖

Mozilla目录结构剖析——Mozilla Firefox安装后的目录文件结构及其功能

    Mozilla FireFox的目录主要分为两个部分,一个是安装目录,一个是用户Profile目录。
    先说用户Profile目录。它的位置如下:
    Windows平台下:(XP, 2K and NT) /Documents and Settings/<UserName>/Application Data/Mozilla/Firefox
                   ('98 and ME) /Windows/Application Data/Mozilla/Firefox
    Linux平台下:~/.mozilla/firefox/
    MacOS X平台下:~/Library/Application Support/Firefox
    profile目录里面放的内容主要是firefox的一些cache、界面的overlay信息、
    用户自己下载的插件和皮肤、以及其他一些个性化的参数配置。
    profile目录是firefox第一次运行的时候创建出来的,并且在卸载的时候是不会删除的。
   
    下面来讲讲安装目录。
    安装目录根目录下有这些内容:
    *.dll:mozilla平台的各种dll、比如javascript的引擎、xpcom引擎、xpi解释引擎等
    install_status.log:这里记录的是安装的过程,及各种组件安装的信息
    install_wizard.log:这里记录的是安装的时候写入注册表中的卸载信息。
    install.log:这个文件第一次安装的时候是没有的,当你从网上成功下载安装了某些
               插件xpi包的时候,它们的信息就会记录在这里。
    /chrome目录,存放是界面层的所有文件,这些文件被按照模块打成一个个的jar包,这里
               还有一个非常重要的文件install-chrome.txt,它记录了界面层各个模块的
               注册信息,只要有新的带有界面的插件模块安装进来,都要到这里进行注册。
               我们可以看到,每个模块通常要注册三条信息:content、locale和skin,
               这个也体现了mozilla对界面的划分思想。程序启动后,会根据install-chrome.txt
               里面的信息生成/chrome/overlayinfo目录和/chrome/chrome.rdf文件,这里
               记录的是各个组件的界面各部分的详细信息及它们之间的overlay关系,程序
               启动后,会先检查install-chrome.txt和overlayinfo、chrome.rdf的新旧,
               如果后者没有则创建之,如果后者日期更旧,说明有新的插件加入进来,就会
               刷新overlayinfo和chrome.rdf。
    /components目录,这里存放的是各种xpcom组件。这些组件包括以C++实现的dll文件和以
               javascript实现的js文件,mozilla程序启动后会根据这些dll和js的信息生成
               comreg.dat和xpti.dat两个xpcom组件的注册表文件,根据这两个dat文件,
               mozilla就知道有哪些组件注册到其中了。在firefox中,这两个dat文件没有
               放在components目录下,而是放到了用户的profile下面,但似乎是换汤不换
               药的做法。
   /defaults目录,这个目录下存放的是程序使用的各种内部配置信息,有兴趣的朋友可以打开
               里面的一些js文件看看。
   /greprefs目录,Gecko Runtime Enviroment的配置信息,这个目录在mozilla 1.7之前是没有的,
               gre的配置信息在mozilla 1.7之前也是放在defaults目录下的。
   /plugins目录,存放第三方插件的dll,比如flash的,mediaplayer的等等,一般之要把第三方
               的dll拷到这个目录下就行了,mozilla会自己检测到的。
   /res目录,这个目录没什么好说的,放的是一些资源文件。
   /uninstall目录,这个目录比较重要,里面存放两个文件,install_wizard1.log和UninstallFirefox.exe,
               install_wizard1.log里面记录的是安装的时候进行的所有操作,包括往哪些目录
               拷贝了文件、往注册表写了什么信息、执行了什么文件等,而UninstallFirefox.exe
               在卸载的时候就是根据这个log文件来进行反操作的。另外,在系统目录下还有一个
               UninstallFirefox.exe文件,是卸载文件的一个备份文件。
   /searchplugin目录,这个是google搜索插件的配置目录,并不能算mozilla自身的目录。
   
   注:以上是针对目前最新的Firefox 1.0及其以前的版本而言的。   

hechengjin 发表于 2016-4-21 19:07:19

https://developer.mozilla.org/en ... erbird/comm-central
https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Source_Code/Directory_structure
页: [1]
查看完整版本: Mozilla技术架构简述 目录结构