FireFox插件开发说明与示例

1.1    说明

1.1.1       FireFox浏览器概述

Mozilla Firefox,中文名通常称为“火狐”,是一个开源网页浏览器,使用Gecko引擎(即非ie内核),可以在多种操作系统如Windows,Mac和linux上运行。Firefox由Mozilla基金会与数百个志愿者所开发,2012年8月,在世界范围内,Firefox占据着23%的使用份额。

1.1.2       FireFox插件概述

FireFox的插件分两种类型,一种extension,叫扩展,一种是plugin,我们叫插件。两种是完全不同的两个东西。extension相对来说简单很多,用的主要是XUL,只是xml的一个变相。而plugin相对来说复杂一些,是Netscape公司提出的一种浏览器插件技术。

1.1.3       FireFox plugin标准

1、在windows平台,火狐的插件是以动态库形式(dll)存在的,并只去识别在其安装目录下plugins文件夹下的dll;

2、dll的名是以8.3原则来命名的,即其名字所包含的字符不超过8个字符且以dll结尾的文件,还有一个规定就是其名字必须以np开头,例如:npXXX.dll,而XXX不超过六个字符;

3、dll是属于MIME(一种标准)类型,要不火狐浏览器不认识它;

4、dll导出的函数必须是NP_GetEntryPoints、NP_Initialize、NP_Shutdown是这三个,这是火狐浏览器能够识别的在个接口,具体说明在插件的生命周期中说明。

1.1.4       plugin生命周期

1、 第一次打开含量有插件的页面时,浏览器最先调用NP_GetEntryPoints作为调用插件的入口,此方法也只在第一次加载插件时调用。

2、 调用NP_GetEntryPoints后,浏览器会调用NP_Initialize初始化插件,NP_Initialize只在第一次调用时被浏览器调用,与NP_Initialize配对的是NP_Shutdown,NP_Shutdown是在关闭了所有含有该插件的页面后被浏览器调用,在生命周期内也只被调用一次。

3、 调用NP_Initialize后,浏览器会调会NPP_New来创建一个插件实例,每打开一个页面都会调用NPP_New一次来创建一个插件实例,与NPP_New配对的是NPP_Destory,在每关闭一个页面都会调用NPP_Destory来释放NPP_New创建的实例

4、 调用NP_Initialize后,一般会调用NPP_SetWindow来调置窗口,对于没有窗口的插件当然不用调用。

注:火狐插件开发的sdk划分为两类接口,一类是与插件相关的,以NPP或者NP开头的;一类是与浏览器相关的,以NPN开头的。

1.1.5       Plugin的基本结构

Plug-in虽然是一个独立的模块,但它是由Mozilla浏览器来调用的。本质上说,Plug-in接管了一个指定大小的显示窗口,窗口的绘制和内容显示则完全由Plug-in插件来控制。所以开发者可以将所提供的任何功能和应用放置在该窗口中。

Netscape/Mozilla制订了浏览器和Plug-in的标准通信过程,但是整个运行过程的核心是浏览器和Plug-in插件互操作过程,以NPP开头的函数是在Plug-in中实现的由浏览器调用的接口,而以NPN开头的函数是在浏览器中实现的由Plug-in调用的接口。

这二类标准函数保证了浏览器和Plug-in能够进行数据交换和操作。这些操作主要分为以下几类。

(1)窗口的内容绘制、显示和事件处理。其中最主要的是函数NPP_SetWindow,它使浏览器指定了Plug-in插件所操纵的窗口显示 区域。

(2)数据流的处理,用于浏览器和Plug-in之间的数据及文件内容的双向传递,主要通过流的方式传递数据。

(3)URL的处理,用于控制浏览器中超链的检索、显示和跳转。

(4)内存操作和其他相关信息。

这些接口适用于Netscape4.0和最新的Mozilla浏览器版本。由于Plugin程序必须以动态库的形式由浏览器调用,因此针对不同的操作系统其实现方式也不同,但是其API的设计非常灵活。

1.2    插件程序示例

本例使用Windows7操作系统,IDE为VS2008中文版,使用的是Firefox4.0.1提供的SDK。将SDK提供的runtime代码加入自建项目,做成FireFox可用的DLL。

下载firefox-4.0.1.source.tar.bz2文件,将\firefox-4.0.1.source \mozilla-2.0\modules\plugin目录解压出来,里面有我们开发NPAPI插件所需的所有资源。

1.2.1       创建Plugin项目

打开VS2008,新建一个Win32项目,名称npdemo,Location项定义到E:\。


然后,选择Application typeDLL,选择Empty project,完成单击“Finish”。

plugin目录复制到E:\npdemo\,以便程序使用。

 

1.2.2       添加文件

首先,复制E:\npdemo\plugin\sdk\samples\npruntime下的文件plugin.h、plugin.cpp、np_entry.cpp、npn_gate.cpp、npp_gate.cpp到E:\npdemo\npdemo\。

test.html文件可以复制到合适位置,作为以后的测试代码。

在npdemo项目中添加复制的文件:


然后,添加def文件,命名最好与项目一致

编辑npdemo.def为

LIBRARY"npdemo"

EXPORTS

   NP_GetEntryPoints       @1

   NP_Initialize       @2

   NP_Shutdown        @3

 

现在,添加资源

选择Version

自动生成了resource.hnpdemo.rc。由于要在版本信息中加项,所以手工编辑npdemo.rc

在图中的BLOCK中添加。BLOCK一定要是"040904e4"。

VALUE "MIMEType", "application/demo-plugin",MIMEType是plugin的唯一标示,需要自己定义,通常的格式是"application/“+ [plugin name]。


1.2.3       修改项目属性

改字符集设置为“使用多字节字符集
添加附加包含目录 “..\..\include”和“..\..\..\..\base\public

 设置预编译宏,总计如下图:

1.2.4       编译调试

现在可以编译,本例编译后,在E:\npdemo\Debug生成npdemo.dll

打开注册表,在HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins下新建子项@mozilla.com.cn/demo,并新建字符串数据“Path”设值为E:\npdemo\Debug\npdemo.dll


打开火狐浏览器 在地址栏输入“about:plugins” 如果在plugin列表中有本例的npdemo.dll及说明plugin示例已经成功完成。


1.2.5       测试结果

    在FireFox打开test.html,效果如下图:

示例程序下载地址:http://download.csdn.net/detail/willy16/5186165


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值