firefox扩展的开发

在Firefox中,扩展(Extension) 就是一个 zip 包,里面有规定的一些必要文件,主要包括一个 install.rdf(安装包相chrome.manifest(设置各种 XUL 文件路径以及其他的一些
关信息和文件资源路径等配置)、资源文件路径)、chrome 文件夹(里面放着插件的所有源文件)。

XUL 是一个支持多种 WEB 技术的、基于 XML 的界面开发语言。它既可以在远程执行,也可以安装到本地执行。在 XUL 中内置了很多界面元素,如菜单、按钮、分页等等,这样就不需要自己编写很多 JS 来维护和控制很多界面元素了。而且,这些界面是按照当时的 OS 外观来展现的,比如同一个按钮,在 MacOS 上和 Windows 上看起来就不一样。另外 XUL 也允许自己使用 JS 和 CSS 来定制自己的个性化界面。总之一句话,XUL 的主要作用就是用来展现 Extension 的用户交互界面的。

通过这个链接 https://developer.mozilla.org/en/Building_an_Extension的相关介绍,可以找到编写一个插件必须要做得一些事情,写的很清楚。最后产生的目录和文件结构是这个样子:
install.rdf
chrome.manifest
chrome
|–content
|–overlay.xul (插件功能的实现)
|–locale
|–en-US
|–sample.dtd
|–zh-CN
|–sample.dtd
|–zh-TW
|–sample.dtd
|–skin
|–classic
|–sampleicon.png
|–smallicon.png
|–default.css (界面显示的样式表)

上面文件中的 install.rdf、chrome.manifest 基本上用例子中的就好了,dtd 文件里面是界面文字,这个可以模仿其他插件编写。

把上面整个目录用 zip 打个包,改后缀名为 xpi,拖放到 firefox 中,提示尚未验证作者、是否继续安装。安装以后,重启 firefox,第一个 Extension就成功安装了!

firefox扩展结构图如下图所示:
222.jpg
图中所示的是firefox中跟扩展相关的部分的结构。其中Necko是firefox处理网络相关的核心部分,而Gecko是firefox解释网页的核心,通常也称为内核,也就是Layout Engine。而RDF模块实现了一系列XPCOM接口,用于在安装扩展或处理扩展过程中,读取RDF文件信息。

扩展安装过程,主要有XPInstall负责,如果XPInstall发现扩展是普通默认扩展,将交由toolkit模块(图中没有画出来)中负责扩展安装的相关部分来处理。

扩展的运行,需要Chrome注册模块支持。在firefox运行时,扩展的chrome信息注册到模块中,再交给XULRunner来显示,其中涉及到所有内核提供的功能涉及到XPCOM。而firefox所有界面都是由XULRunner来实现的。所以,在扩展运行过程中,扩展已经和firefox本身融为一体。扩展跟firefox内核的交互,和firefox主界面跟内核的交互,两种交互是一样的,都是在XULRunner的平台上,调用XPCOM来实现相应的功能。