如何编写Firefox浏览器插件,一个下载百度空间所有文章的插件


2009-09-11 15:28    阅读    评论 1.开发Firefox 插件的官方文档。到firefox主页上去找就可以找的到。他们的文档还是很详细的,不过像我这种英语水平的看起来不是很容易。
https://developer.mozilla.org/En/Extensions/Firefox http://kb.mozillazine.org/Extension_development

最主要的参考资料都在这个页面的链接里面了
https://developer.mozilla.org/En/Documentation_hot_links

常见功能的例子
https://developer.mozilla.org/en/Code_snippets

2、先浏览一遍上面的网页,就清楚了。我也简单的介绍几个概念吧。

(1)XUL 这个是用来编写插件界面的语言,类似HTML,如果你会HTML 那么一切都很简单了。
(2) javascript 没什么好说的了,网页上是这样用,插件里也是这样用。
     就是我写的时候需要不时参考一下firefox的javascript 手册,忘记了什么查查很方便的。
   Core JavaScript 1.5 Reference - MDC   https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference
   Core JavaScript 1.5 Guide - MDC    https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide

   调试时,直接在firefox打开 xul文件,然后在firefox的“错误控制台”中可以看到错误的输出吧。当然用firebug可能也有帮助。不过我感觉调试还不是很方便,大多时候都是用alert()来了,我也不知道有什么好办法没有,有的可以告诉我一下。
(3)XPCOM 类似windows上面的COM概念,就是定义了环境无关的接口标注,好像可以用c 啊 等javascript来写,然后按他定义的标注开放接口别人就可以用了。不过我是没写国了。Firefox的各种功能也都是封装成一个一个的XPCOM 的,所以一要在插件里面调用firefox提供的功能就是要先 请求 服务然后接口什么的。和windows的COM有点类似。一开始不知道,找了半天还找不到怎么在自己的脚本里面调用firefox的功能借口的。给个例子,比如要查找本地目录是否存在和创建他,代码是这样的

verifyDownloadDir: function (fileName) { 
 

    var file = Components.classes["@mozilla.org/file/local;1"] 
 
                                   .createInstance(Components.interfaces.nsILocalFile); 
 
    file.initWithPath(fileName); 
 
    if(!file.exists() || !file.isDirectory() ) {   // if it doesn't exist, 
 
        // create 
 
        alert("指定的路径不存在或者不是一个目录!"); 
 
        return false;     
 
    } 
 

    try { 
 
        file.append("百度空间文章"); 
 
        file.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0777); //0777可读可写可执行,参考参数说明https://developer.mozilla.org/en/PR_Open#Parameters 
 

        downloadPath = file.path; // 开始保存的时候,文件放在这里 
 

        file.append("data"); 
 
        file.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0777); 
 
        // throw "ddd"; 
 
    } 
 
    catch (e) { 
 
        alert("创建子目录失败!"); 
 
        return false; 
 
    } 
 

    return true; 
 
 },




上面说的Code_snippets里面也有很多例子了。另有 
XPCOM API Reference - MDC   https://developer.mozilla.org/en/XPCOM_API_Reference


3、编写一个实际的插件,用下面这个向导生成一个小例子,然后再这个基础上面修改就行了
http://ted.mielczarek.org/code/mozilla/extensionwiz/
调试的时候可以按照 readme.txt的说明来配置一下环境。
运行里面的 build.sh 即可以生成一个 *.xpi 插件包了,其实就是个zip文件,就可以提供给别人呢安装使用了。

后面的事就自己来咯,参考别人的插件是怎么写的也是个不错的主意。

我写个一个下载百度空间里面所有文章的插件。现在可以把我以前那个百度空间的文章下载下来打包保存咯。呵呵 
下载下载,把后最名改为widebright.xpi,然后拖到firefox里面去就会提示时候安装插件了。装完重启,在“工具” 菜单里面就可以找到一个 绿色的"widebright"的小插件“的项了。
https://sites.google.com/site/widebright/firefox-bai-du-kong-jian-xia-zai-cha-jian/widebright.xpi.zip

运行之后是这样的,还不错,呵呵