Today's the day

在那毁灭之路,逆流而上


firefox扩展开发(一) : 扩展的基本结构

galeki posted @ 2007-05-18 11:09PM in Firefox扩展开发 with tags firefox 扩展 开发 extension
firefox扩展开发(二):用XUL创建窗口控件

用过firefox的人肯定要安装firefox的扩展,这样才能发挥火狐的全部实力。一般扩展是一个后缀为.xpi的文件,其实这个文件就是zip格式的压缩包,压缩了一个扩展所需要的所有目录和文件,基本的目录结构如下:

extension.xpi:
              /install.rdf                   
              /components/* 
              /components/cmdline.js                   
              /defaults/
              /defaults/preferences/*.js     
              /plugins/*                       
              /chrome.manifest               
              /chrome/icons/default/*       
              /chrome/
              /chrome/content/

看似很复杂,让我们从最重要的文件开始介绍起:

1. install.rdf

从名字可以看出,这个文件描述了扩展安装所需要的信息,包括了扩展的标识、版本、适用的应用程序、作者等等等等。本身是一个rdf文件。

基本的install.rdf示例:

  1. <?xml version="1.0"?>
  2.  
  3. <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  4.      xmlns:em="http://www.mozilla.org/2004/em-rdf#">
  5.  
  6.       <!-- 标识和版本 -->
  7.   <Description about="urn:mozilla:install-manifest">
  8.     <em:id>galeki@linuxge.org</em:id>
  9.     <em:version>1.0</em:version>
  10.     <em:type>2</em:type>
  11.    
  12.     <!-- 针对的应用程序 -->
  13.  
  14.     <em:targetApplication>
  15.       <Description>
  16.         <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
  17.         <em:minVersion>1.5</em:minVersion>
  18.         <em:maxVersion>2.0.0.*</em:maxVersion>
  19.       </Description>
  20.     </em:targetApplication>
  21.    
  22.     <!-- 名称、介绍、作者和网站地址 -->
  23.     <em:name>Hello</em:name>
  24.     <em:description>扩展测试</em:description>
  25.     <em:creator>galeki</em:creator>
  26.     <em:homepageURL>http://blog.linuxgem.org/galeki</em:homepageURL>
  27.   </Description>     
  28. </RDF>

8~10行是标识信息,第8行的<em:id>段是此软件包唯一的标识,可以是作者的email,目的是唯一标识此软件包。第9行是目前的版本。第10行的<em:type>,值为2代表"我是扩展",4代表"我是主题",这里是扩展,所以值为2。

14~20行的<em:targetApplication>段描述了软件包针对的应用程序,16行那段古怪的<em:id>表明此扩展是针对firefox的,而不是thunderbird、sunbird,所以,只要是针对firefox的扩展,此id的值都不变。17~18行描述了此扩展适用的firefox版本。

23~26行描述了扩展的基本信息,从标签的名称上就可以看出意思,扩展管理器中显示的扩展信息,就是来源于这里。

2. chrome目录 

 chrome是扩展最重要的一个目录,所有描述扩展的文件,称为chrome。

chrome一般包括3类文件,content、locale、skin:

content:描述扩展界面、外观的定义文件,比如按钮布局,对话框,通过XUL文件和js文件来设定,后面我们可以看到XUL的介绍。

locale: 描述多语言信息的文件,一般是xml的dtd文件。

skin: 定义界面样式的css文件和所需要的图片文件。

一个典型(并不绝对)的chrome目录下包含这么几个子目录:       

              /chrome
                    content/
                    locale/
                    skin/

三个子文件夹存放了扩展对应的content、locale和skn类型的文件。

3.chrome.manifest文件

接下来,得让fierfox找到扩展的content、locale、skin文件在哪里,chrome.manifest就是这个作用。

这个文件让firefox知道扩展的content、locale、skin等文件在哪里,例如:

content     hello    chrome/content/

简单来说,就是指明,hello这个扩展的content类型文件,在chrome目录的content子目录下。

locale的定义稍有区别:

locale  hello  zh-CN   chrome/locale/zh-CN/

指明hello这个扩展的zh-CN,也就是中文的locale,在chrome/locale/zh-CN/目录下。

skin的定义和locale相似:

skin   hello  classic/1.0   chrome/skin/classv1/

指明hello这个扩展,名叫classic/1.0的skin,在chrome/skin/classv1/目录下。

通过chrome.manifest文件的指定,firefox就可以找到对应的文件。在firefox中,引用web服务器上的文件是用的“http://”前缀,引用硬盘上的文件是用的“file://"前缀,引用扩展中的文件有单独的引用前缀,就是“chrome://“,比如:

chrome://hello/content/about.xul
引用了hello扩展content类型文件中的about.xul文件。这样一来,不管在硬盘上扩展的content、locale、skin是在什么地方,只要chrome.manifest文件配置好,就可以让firefox通过“chrome://”引用到特定的文件了。

FireFTP的例子:

由上图的地址栏可以看出,打开FireFTP这个扩展,实际上就是打开了fireftp的content类型文件中的fireftp.xul文件。

全局相关文章
相关文章

Comments Feed

1
Cite lyanry [Guest] posted @ 2007-05-19 07:52PM

艾?要出这方面的专题?


Head_small
galeki

呵呵,是呀。我也是一边学一边写,希望我能写完~


3
Cite SlimCold [Guest] posted @ 2007-05-31 08:08PM
楼主用的FF的UI怎么那么好看呢…… 用的是Linux吧?

4
Cite SlimCold [Guest] posted @ 2007-05-31 08:08PM
楼主用的FF的UI怎么那么好看呢…… 用的是Linux吧?

Head_small
galeki

对,是linux,外观主题是MurrinaCandy。  :)


6
Cite 书童涛涛 [Guest] posted @ 2007-06-29 10:07AM

谢谢了大哥,解决了偶的实际问题,雪中送炭:)


Head_small
galeki


8
Cite jocat [Guest] posted @ 2007-07-03 10:33AM
相当的8错!赞!原来firefox的扩展也8是很复杂的说。。。灭活活……

9
Cite jocat [Guest] posted @ 2007-07-03 10:34AM
相当的8错!赞!原来firefox的扩展也8是很复杂的说。。。灭活活……

Head_small
galeki

汗……楼上的好兴奋啊


11
Cite pc2100 [Guest] posted @ 2007-10-13 06:03PM
8错~~ 谢谢介绍 保存起来好好学习

12
Cite 生如夏花 [Guest] posted @ 2008-05-07 09:50PM
楼主太有才了。。不知道可以指导一下我呢?。。如果可以的话加我qq:308989618。先在此谢过了。

Head_small
galeki

呵呵,其实我也只是开了个头~


14
Cite guawoo [Guest] posted @ 2008-05-25 09:42PM
希望博主能继续写下去啊,这方面的中文资料太少了,非常感谢 come on~~~~~


* Login
*