`

Firefox插件开发: Hello World!

阅读更多
今天尝试开发一个Firefox的插件。虽然比较简单,网上也有很多教程,但是感觉一些教程写的比较麻烦,在初步的开发过程中并没有用到那些东西,于是自己把开发过程记录下来。我是根据Mozilla官方教程开发的,有兴趣的朋友可以自己去看看:https://developer.mozilla.org/en/Building_an_Extension。

按照一般的教程,第一个程序都是使用最简单的Hello World,现在我们就制作一个Firefox的Hello World插件。

开发Firefox插件并没有看上去的那样复杂,仅仅使用XML和JavaScript就可以完成。当然,这个意思是Firefox插件开发使用的技术是XML和JavaScript,要做出一个完善的插件涉及到很多方面。但是对于我们的Hello World就不需要那么多东西啦!

1. 准备目录结构

首先在硬盘上建立一个目录,名为extension。这个名字是随意取的。然后在里面建立chrome文件夹,再在chrome里面建立content文件夹。注意这两个文件夹的名字都是固定的,不能随意改动。然后在extension里面新建两个文本文件,并且取名为chrome.manifest和install.rdf。这样,就建立起如下的目录结构:
extension
|--install.rdf
|--chrome.manifest
|--chrome
    |--content

2. 编写install.rdf

用文本编辑器打开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"> 
        <!-- 指出插件的ID。该ID应该是一个Email格式的字符串,或者是一个GUID。注意,使用Email的作用是保证该ID的唯一性,并不要求这个Email地址是有效的。必填。 --> 
        <em:id>sample@example.net</em:id> 
        <!-- 指出插件的版本号。必填。 --> 
        <em:version>1.0</em:version> 
        <!-- 在这里的值必须是2。该标签说明该应用的Firefox插件,而不是其他XUL应用程序。Firefox插件的代码是2,如果是Firefox主题则会是4。必填。 --> 
        <em:type>2</em:type> 
        
        <!-- 安装插件的目标应用程序以及最高版本和最低版本。必填。 --> 
        <em:targetApplication> 
            <Description> 
                <!-- Firefox的ID,这个值不能改变。必填。 --> 
                <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> 
  <!-- 指明能使用该插件的Firefox最低版本。这里是指1.5。必填。 --> 
                <em:minVersion>1.5</em:minVersion> 
  <!-- 指明能使用该插件的Firefox最高版本。这里是指3.0.x。结合minVersion,即是说本插件只适用于1.5和3.0.x之间的版本。必填。 --> 
                <em:maxVersion>3.0.*</em:maxVersion> 
            </Description> 
        </em:targetApplication> 
        
        <!-- 插件的元数据。 --> 
        <!-- 插件名字。必填。 --> 
        <em:name>sample</em:name> 
        <!-- 插件的描述。这里的描述将出现在Firefox的工具-附加组件的描述栏。选填。 --> 
        <em:description>A test extension</em:description> 
        <!-- 插件作者。选填。 --> 
        <em:creator>galaxy.org</em:creator> 
        <!-- 插件主页的URL。选填。 --> 
        <em:homepageURL>http://www.example.com/</em:homepageURL> 
    </Description>             
</RDF>

install.rdf文件是供具有插件管理功能的XUL应用程序使用的,XUL应用程序可以使用该文件识别正在安装的插件的信息。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"> 
        <!-- properties --> 
    </Description> 
</RDF>

上面的install.rdf的注释很多,实际应用中就不需要那么多注释了。

3. 编写XUL文件

Firefox的界面使用XUL和JavaScript进行描述。XUL即XML User Interface Language,是Mozilla开发的一种使用XML进行用户界面描述的语言。XUL只用来定义用户界面,其组件的功能由JavaScript进行定义。

Firefox的整个界面都使用XUL进行定义。可以在%FIREFOX_INSTALL_DIR%/chrome/browser.jar里面找到content/browser/browser.xul文件。(说明一下,jar文件可以用WinRAR或其他一些压缩工具解压缩,这是一个使用zip算法压缩的压缩包)在这个XUL文件中有这么一段:
<statusbar id="status-bar"> 
<!-- ... <statusbarpanel>s ... --> 
</statusbar>

这里的这个<statusbar id="status-bar">称为“覆盖点(Overlay,我不知道官方的翻译是什么,自己把它翻译成了这个词,想想还算是准确,不过为了不引起混淆,下面还是使用Overlay这个单词吧 :-) )”。所谓Overlay,就是在运行一个XUL文档的时候可以附加其他的XUL文件的方式。就是说,我们本来的XUL是a.xul,这里面有一个Overlay定义为overlay-point,那么我们可以在另外一个b.xul中对这个Overlay进行追加,从而在执行a.xul的时候可以自动的把b.xul的内容附加到overlay-point并运行出来。这么说有些抽象,来看我们的代码:
<?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>

刚刚说了,<statusbar id="status-bar">就是一个Overlay,那么在我们的插件的XUL文档就是基于这个Overlay进行扩展。在这里,我们在statusbar上面定义了一个statusbarpanel,它的id是my-panel,label是Hello, World。这段代码比较清晰,就是在原有的statusbar上追加一个statusbarpanel,这个statusbarpanel显示Hello, World。

明白了这段代码之后,我们把这个文件定义成sample.xul,保存在chrome/content下面。可以看到这个文件夹结构和Firefox自有的那个结构是一致的。

在写完了XUL文件之后,我们要定义其chrome.manifest。XUL文档需要通过chrome://协议进行请求。chrome://类似http://协议,只不过是用来请求XUL文档的。在Firefox的地址栏中输入chrome://browser/content/browser.xul,看看有什么反应,就会知道XUL文档的作用了。

这个URL包括四部分:
1) chrome:// - 即协议名,就像http://一样;
2) browser/ - 包名,即插件的包的ID;
3) content/ - 请求内容的类型;
4) browser.xul - 请求的文件名。
所以,chrome://foo/skin/bar.png就是请求一个在foo包下面的skin里面的bar.png文件。

4. 编写chrome.manifest

在chrome.manifest中添加下面一句:

content         sample        chrome/content/

这里指明,请求类型时content,包名是sample,位置是相对于chrome.manifest文件的chrome/content/。注意,这里的最后面一个/是不能缺少的!

然后需要告诉Firefox我们的扩展Overlay,在chrome.manifest里面再添加一句:

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

这句是告诉Firefox,需要在chrome://browser/content/browser.xul加载的时候将chrome://sample/content/sample.xul扩展进来。

5. 测试

至此,我们已经完成了这个Hello World的插件。下面我们测试一下。

使用压缩工具将extension文件夹压缩成zip文件,注意有些工具会将本文件夹加入压缩包,这里要求压缩包解开之后应该是extension下面的两个文件和一个文件夹,而不是extension文件夹。然后将后缀名改为xpi。然后打开Firefox(我测试的版本是3.0.10),将这个xpi拖到窗口中,Firefox将提示安装插件,按照一般的过程安装之后,重启Firefox有时候在安装插件时会有找不到安装脚本的错误,就是因为在压缩时根下面没有install.rdf那一层导致的。

当我们在重启Firefox之后,右下角出现Hello, Word字样时,说明我们的插件已经安装成功了!

本文出自:http://jbean.blog.51cto.com/448512/160298
分享到:
评论
9 楼 zxjlwt 2016-03-31  
学习了
http://surenpi.com
8 楼 atongmu518 2013-12-19  
请问要开发一个象支付宝输入密码的文本框,那样的东西是插件还是扩展?
7 楼 learn_2010 2011-05-10  
那我也不清楚了哦 好久不弄这个了

呵呵。。 
6 楼 shansun123 2011-05-10  
learn_2010 写道

xpi文件解压出来,就是一个文件夹和两个文件的目录。install.rdf我是复制你的内容,只改了一个最高版本。
还是出现同样错误。望指点。刚开始学习。 

那我也不清楚了哦 好久不弄这个了
5 楼 learn_2010 2011-05-10  
shansun123 写道
learn_2010 写道
   我的添加进去的时候总是提示错误,
Firefox 无法将文件安装至

file:///E:/Other%20WorkSpace/FireFox%20Plugin/extension/extension.xpi

,原因为: 不是合法的安装包
-207,请教一下。

是不是因为路径中含空格了啊


你是说安装路径是吧。我改为E盘根目录,也是同样错误。我火狐是3.5.16版本,然后我把install.rdf 最高版本改为4.0,不知道这样对不。
我的文件目录结构:
extension
--install.rdf
--chrome.manifesf
--chrome
  --content
    --sample.xul
xpi文件解压出来,就是一个文件夹和两个文件的目录。install.rdf我是复制你的内容,只改了一个最高版本。
还是出现同样错误。望指点。刚开始学习。 
4 楼 shansun123 2011-05-10  
learn_2010 写道
   我的添加进去的时候总是提示错误,
Firefox 无法将文件安装至

file:///E:/Other%20WorkSpace/FireFox%20Plugin/extension/extension.xpi

,原因为: 不是合法的安装包
-207,请教一下。

是不是因为路径中含空格了啊
3 楼 learn_2010 2011-05-10  
   我的添加进去的时候总是提示错误,
Firefox 无法将文件安装至

file:///E:/Other%20WorkSpace/FireFox%20Plugin/extension/extension.xpi

,原因为: 不是合法的安装包
-207,请教一下。
2 楼 shansun123 2010-10-30  
hoary20 写道
你这是插件还是扩展呢?

扩展
1 楼 hoary20 2010-10-29  
你这是插件还是扩展呢?

相关推荐

    Firefox扩展实例-HelloWorld

    在本实例"Firefox扩展-HelloWorld"中,我们将探讨如何创建一个基础的Firefox扩展,以此来理解其基本架构和开发过程。 首先,"helloworld.xpi"文件是Firefox扩展的打包格式,类似于其他软件的安装程序。XPI...

    火狐扩展插件HelloWorld项目

    火狐扩展插件,也称为Firefox插件或Add-ons,是一种增强火狐浏览器功能的应用程序。它们是由开发者创建的,可以提供各种定制化的服务,如网页拦截、广告屏蔽、下载管理等。"HelloWorld"项目就是一个典型的入门级教程...

    firefox 最新开发文档

    这份文档涵盖了从基础的插件开发到高级的浏览器扩展技术,为想要参与Firefox生态建设的开发者提供了详尽的指南。 首先,让我们从"Firefox 插件"开始。Firefox插件是一种轻量级的软件组件,它们可以增强浏览器的功能...

    跨浏览器的桌面通知插件Push.js.zip

    这个通知API允许在当下流行的浏览器上使用,像Chrome, Safari, Firefox,和IE 9 。可以推送一个通知到用户桌面。如果用户的浏览器不支持这个新的API,会回滚到使用旧的实现方式。运行效果:示例代码:创建通知Push....

    Firefox 技巧:如何同时打开多个书签或网址

    在使用 Mozilla Firefox 浏览器时,有时我们可能需要快速地打开多个书签或网址,以便于进行多任务浏览或工作。以下是一些实用的Firefox技巧...在Firefox的庞大插件库中,还有很多类似的功能性工具等待你去探索和利用。

    jQuery学习笔记之Helloworld

    此外,jQuery对浏览器的广泛兼容性也是其亮点,它支持包括Internet Explorer 6.0+、Firefox 1.5+、Safari 2.0+、Opera 9.0+在内的多种浏览器,消除了开发者在跨浏览器兼容性上的烦恼。 jQuery的使用使得DOM操作变得...

    extjs 3.4 开发前准备

    - Firebug: 作为Firefox的插件,提供源代码查看、断点调试、性能分析等功能。 - Spket: 是一个强大的JavaScript开发工具,可以作为Eclipse插件使用,提供代码补全、语法检查等功能。安装步骤包括下载spket-1.6.*.jar...

    myeclipse下安装flex说明文档

    &lt;mx:Label text="Hello World!" /&gt; &lt;/mx:Application&gt; ``` ##### 3.3 配置 FlashTracer 1. 打开 FlashTracer,确保其已正确安装。 2. 在 “Select output file” 中手动设置调试日志文件路径。 3. 在指定路径下...

    jquery插件编写

    message: 'Hello World!', duration: 3000 }, options); return this.each(function() { var $this = $(this); var $alertBox = $('&lt;div&gt;').addClass('custom-alert').text(settings.message).hide(); $...

    artDialog插件和API详解

    content: 'Hello, World!', buttons: [ { id: 'customButton', name: '自定义按钮', click: function () { console.log('点击了自定义按钮'); } } ] }); ``` ### 结论 `artDialog`是一个强大且易于使用...

    TinyMCE开发笔记

    tinymce.activeEditor.setContent('&lt;p&gt;Hello World!&lt;/p&gt;'); // 触发保存事件 tinymce.triggerSave(); ``` 六、TinyMCE自定义开发 对于高级用户,TinyMCE允许自定义主题、创建新插件,甚至修改源码。例如,如果你想...

    JavaScript调试方法以及常见错误.pdf

    console.log("Hello World!"); 2. 使用 debugger 语句暂停代码的执行 使用 debugger 语句可以让代码暂停在指定的位置,以便开发者检查变量的值和执行路径。例如: function add(x, y) { debugger; return x + y; ...

    TypewriterJS实现一个很酷打字机效果的javascript插件

    strings: ['Hello, world!', 'Welcome to my website.'], startDelay: 1000, cursor: '_', loop: true }); ``` 在这个例子中,`#typewriter`是HTML元素的选择器,`strings`数组定义了要显示的文本,`startDelay...

    jquery傻瓜教程

    - **跨浏览器兼容**:jQuery 兼容多种浏览器,包括 Internet Explorer 6.0+,Firefox 1.5+,Safari 2.0+,Opera 9.0+,确保在不同浏览器环境下一致的行为。 - **轻量级**:jQuery 的核心库文件大小约为15KB,包含...

    xajax实例!!!

    4. **兼容性**:xajax 与大多数现代浏览器兼容,包括 Internet Explorer、Firefox、Chrome 和 Safari 等,这使得开发的 AJAX 应用程序具有广泛的用户覆盖范围。 5. **社区支持**:作为开源项目,xajax 有一个活跃的...

Global site tag (gtag.js) - Google Analytics