Firefox extension开发实战

来源:互联网 发布:java 简单工作流 编辑:程序博客网 时间:2024/05/26 02:52

    开始写文章之前,先自我检讨一下自己的无知。

    Firefox是开源的,地球人都知道。在接触现在的项目中FF扩展的开发之前,我居然一直都认为FF是Java开发的(以前一直都把java和开源划上等号了)。现在终于明白,有很多开源项目像FF一样,都是C/C++开发的,有大家熟知的Mysql、PHP等。真是一个等级错误啊,宛如当年我认为移动存储设备只有U盘和移动硬盘一样,其实还有SD卡、MINI-SD卡、TF卡、CF卡、MMC卡等,愚昧啊。。。

 

    OK,废话到此为止,让我们进入正题吧。本文章分六部分:

    1.FF extension总体认知

    2.开发环境搭建

    3.开发实例(自定义右键子菜单)

    4.程序发布

    5.开发心得

    6.技术参考

 

    (一)FF extension总体认知

    FF是基于mozilla内核的,其浏览器引擎功能主要由C语言实现,但其浏览器界面及其界面上的相关操作都是由JS和XUL完成的,这就是FF的强大之处,同时它也为大家提供了很好的扩展机制。

    FF扩展的开发目录结构:

    --content

       --[main JS&XUL files]

    --locale

       --en-US

          --[some dtd or properties files]

       --[other languages]

    --skin

       --[some css files or pictures]

    --defaults

       --preferences

    --components[可选]

    --chrome.manifest

    --install.rdf

    --install.js[可选]

 

 

    FF的工作方式:

    对于任何一种新的开发语言或环境,大家通常都试图去寻找程序的入口点。可以很负责任地跟大家说,任何编译型(解释型程序)开发语言的程序都有类似C中的Main函数、Java中的主类(public static void main函数)、C#中的入口函数(static void/int Main)等作为程序入口。

 

    本实例中的JS程序加载入口:

   

 

    XPCOM简介:

 

    (二)开发环境搭建

    如果大家对FF extension的文件目录结构非常熟悉,我们当然可以不使用任何IDE,一样可以完成火狐扩展的开发工作。不管是否使用IDE,都建议大家使用ant(对,就是传说中的Java编译工具)来编译管理FF扩展工程。

    下面跟大家介绍两种常用的FF extension IDE。二者各有优缺点,大家可以根据自己的爱好来选择。

    1.Foxbeans(NetBeans)

 

    2.Spket

    这是官方推荐的FF extension开发工具,之所以将它放在第二位,是因为它的开发方式是半自动化的:它有良好的函数提示功能,但需要借助Venkman等调试工具进行调试,需要手动打包部署。

 

    关于Spket的破解方法,请参照我的前一篇文章:

    http://blog.csdn.net/wirror800/archive/2010/05/29/5633172.aspx

 

    好在Spket新建的FF extension工程中提供了一个基本的build.xml文件。我们可以修改这个build.xml文件,然后使用ant来编译整个项目。另外,开发过程中可能需要频繁编译工程,我们可以写一个简单的bat文件来实现快速编译。

   

    (三)开发实例(自定义右键子菜单)

    现在想实现一个功能,在本站点的某个Iframe中,修改FF的ContextMenu。

    完成这样一个功能,我们需要开发两种代码:xul和js。

    添加右键菜单项的XUL:

   

    实现右键菜单自定义的JS:

   

    然后在程序载入的时候,调用zoiqTab.initOverlay()方法:

   

    (四)程序发布

    如果大家对FF extension的文件目录结构非常熟悉,我们当然可以不使用任何IDE,一样可以完成火狐扩展的开发工作。不管是否使用IDE,都建议大家使用ant(对,就是传说中的Java编译工具)来编译管理FF扩展工程。

    程序发布目录结构:

    --chrome

        --ffDemo.jar

       {

        --content

           --[main JS&XUL files]

        --locale

            --en-US

               --[some dtd or properties files]

            --[other languages]

        --skin

            --[some css files or pictures]

        }

    --defaults

       --preferences

    --components[可选]

    --chrome.manifest

    --install.rdf

    --install.js[可选]

 

 

    (五)开发心得

    1.阅读在线MDC文档

    2.尽量利用已有的FF内建函数来完成一些功能,这样可以减少出错的机会。内建函数,可以参照chrome://browser/content/brower.js、chrome://browser/content/brower.xul等文件(将FF安装目录下的jar文件解压,或者通过浏览器中view-source,或者在线的FF源码http://mxr.mozilla.org/mozilla-central/source/browser/base/content/browser.js#1000来查看)。在这里,你可以找到gBrowser、gContextMenu等全局变量的定义,以及一些不为人知的隐藏API。

    3.尽量使用oo的思想来书写JS程序,这样可以增强程序的可读性和可复用性。

    4.借鉴FF Add-ons网站上,其它高手发布的一些扩展源码。

    (六)技术参考

    1.MDC在线文档

     https://developer.mozilla.org/en/DOM/window

     https://developer.mozilla.org/en/DOM/document

     https://developer.mozilla.org/en/Code_snippets/Tabbed_browser

     view-source:chrome://browser/content/browser.js
     view-source:chrome://browser/content/nsContextMenu.js

     ……

    2.技术论坛/聊天室

 

    3.Add-ons for Firefox

    https://addons.mozilla.org/en-US/firefox/