Visit Mozilla.org

构建一个扩展

From MDC

[ [== 快乐学习.快乐生活.. ==]

]

目录

[编辑] 不要浪费时间

本文档逐步演示如何建立一个简单的扩展,在火狐的状态栏的托盘上显示 "Hello,World!"

注意 本文档针对火狐 1.5。 早期版本的火狐扩展请参考其它文档。

[编辑] 建立开发环境

扩展文件以 ZIP 方式打包发布,带有扩展名 xpi (发音为 “zippy”)。 XPI 文件展开后的目录结构类似于下面:

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

在开发时最好采用相同目录结构,这样可以直接用于测试,比较方便。

好,我们现在开始写扩展。先建立一个目录,比如~/extensions/myExtension/ 或者 C:\extensions\myExtension\。在这个目录下,建立一个子目录 chrome, 在 chrome 下,再建立一个目录 content

(在类 unix 系统上,你可以同 mkdir -p chrome/content 同时建立 chrome 和 content 目录;在 windows 上,你可以 md chrome/content 来同时建立 chrome 和 content 目录)。

在扩展的 目录下,chrome 目录的旁边,创建立两个文本文件, chrome.manifestinstall.rdf

建立开发环境的技巧可以参考: Mozillazine Knowledge Base.

[编辑] 创建安装配置文件

把如下内容加入 install.rdf

<?xml version="1.0"?>

<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:em="http://www.mozilla.org/2004/em-rdf#">

  <Description about="urn:mozilla:install-manifest">
    <em:id>sample@foo.net</em:id>
    <em:version>1.0</em:version>
    <em:type>2</em:type>
   
    <!-- Target Application this extension can install into, 
         with minimum and maximum supported versions. --> 
    <em:targetApplication>
      <Description>
        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
        <em:minVersion>1.0+</em:minVersion>
        <em:maxVersion>1.5.0.*</em:maxVersion>
      </Description>
    </em:targetApplication>
   
    <!-- Front End MetaData -->
    <em:name>Sample!</em:name>
    <em:description>A test extension</em:description>
    <em:creator>Your Name Here</em:creator>
    <em:homepageURL>http://www.foo.com/</em:homepageURL>
  </Description>      
</RDF>
  • sample@foo.net - 扩展的 ID. 这个值的作用是唯一标识这个扩展,并不是你的邮件地址。也可以直接使用 GUID。
  • 指明 <em:type>2</em:type> -- 2 表示这是一个扩展 (其它类型看这里 Install Manifests#type)。
  • {ec8030f7-c20a-464f-9b0e-13a3a9e97384} - 火狐的唯一标识。
  • 1.0+ - 所兼容的火狐最低版本号。
  • 1.5.0.* - 所兼容的火狐最高版本号。请勿把它设置为高于火狐当前的最高版本号。

更多的属请看这里 Install Manifests

保存文件。 link title

[编辑] 用 XUL 扩展浏览器

火狐的用户界面是用 XUL 和 JavaScript 写成的。XUL 通过 XML 语法描述用户界面的 widgets 组织。widgets 可以与 JavaScript 代码绑定,提供各种功能。

通过加入或修改 widget,可以修改浏览器的用户界面。

browser(浏览器的主窗口) 所对应的 XUL 文件是 browser.xul(包含在$FIREFOX_INSTALL_DIR/chrome/browser.jar 中). 在 browser.xul 可以找到对状态栏的描述:

<statusbar id="status-bar">
 ... <statusbarpanel>s ...
</statusbar>

<statusbar id="status-bar"> 是 XUL 覆盖的一个“融合点”。

[编辑] XUL 覆盖

XUL Overlays 是一种动态添加 widgets 到 XUL 文档的一种方法。 一个 XUL 覆盖就是一个 .xul 文件,该文件描述了一段 XUL 代码通过哪一个“融合点” 插入到“主”文档中。插入的 XUL 代码可以描述 widgets 的插入,删除和修改。

XUL 覆盖文档的例子

<?xml version="1.0"?>
<overlay id="sample" 
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 <statusbar id="status-bar">
  <statusbarpanel id="my-panel" label="Hello, World"/>
 </statusbar>
</overlay>

命名为status-bar<statusbar> 元素指定了在 browser 窗口上附加元素的 “融合点”。

子元素 <statusbarpanel> 要添加的的 widget。

把上面的示例代码保存在一个文件 sample.xul 中,并把它复制到前面创建的 chrome/content 目录下。

[编辑] Chrome 路径

[编辑] 创建 Chrome 清单

要了解更多关于 Chrome Manifests 的信息,请参考 Chrome Manifest

把下列代码加到 chrome.manifest 文件当中:

content     sample    chrome/content/

(不要忘了最后的"/"! 少了它, 扩展加载会失败.)

这个文件指定如下内容:

  1. chrome 包所包含的内容
  2. chrome 包的名字
  3. chrome 包对应文件的位置

在我们的 chrome 包 sample 中,content 所包含的文件位于 chrome/content 下,这个路径是相对于 chrome.manifest 而言的。

注意,content, locale 和 skin 的文件必须放在 chrome 的子目录 conetnt, local, skin 中。如没有 local,skin 文件,则可以忽略。

在安装扩展时,火狐会根据这个文件来登记 chrome 包。

[编辑] 登记覆盖

若想在浏览器的主窗口显示时,我们所附加的 widget 也同时显示,必须向火狐登记。在 chrome.manifest 中添加一行:

overlay chrome://browser/content/browser.xul chrome://sample/content/sample.xul

这表示在 browser.xul 加载时,同时加载覆盖sample.xul.

[编辑] 测试

首先,我们要把扩展安装到火狐中。在火狐 1.0 以前,必须把文件打包成 XPI 文件,并用火狐打开,安装。这很麻烦,现在已经有了更便捷的方法。

  1. 打开你的 Profile Folder
  2. 打开 extensions 目录 (如果没有,就创建一个)
  3. 建立一个新的文件, 把你的扩展目录路径写到文件中,也就是~/extensions/myExtension or C:\extensions\myExtension\ . 把文件命名为 扩展的 id, 也就是 sample@foo.net

现在我们可以测试扩展了!

启动火狐。火狐会发现并安装你的扩展。当浏览器的主窗口显示时,在其右下方,状态栏中,应该能看到文字 "Hello, World!"。

Image:firefox_extension_statusbar.PNG

[编辑] 打包

现在我们的扩展已经能工作了,在发布前,应该把它打个包。

把扩展所在目录下的文件,目录,子目录用 zip 方式打个包,并带有后缀 .xpi。若你安装有 7z,可以这样:

7z -tzip a sample.xpi *

现在可以把你的 .xpi 文件放到服务器上,确保该服务器能识别 application/x-xpinstall 类型. 你可以提供到这个文件的连接,这样用户就能通过火狐来安装它了。

比如:sample.xpi 点击安装

[编辑] 从网页安装扩展

你能有很多种方法从网页上安装各种扩展,其中包括通过使用InstallTrigger对象直接点击后缀为xpi的链接。鼓励扩展提供商和网络创作者使用InstallTrigger方法来安装各类xpi,给用户提供最好的经验 --Yyn9566 07:02 2007年3月21日 (PDT)