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


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 编写火狐浏览器插件的步骤如下: 1. 了解插件开发基础知识,包括插件的结构、事件处理和控制浏览器页面的API等。 2. 创建插件项目,可以使用Firefox插件SDK或自己编写XUL代码。 3. 在插件中添加必要的代码来监听浏览器事件,例如`onLoad`事件。 4. 使用`tabs`API,判断当前激活的浏览器标签页是否在特定网站,如果是,则激活插件功能。 5. 添加必要的用户界面元素,例如浏览器菜单或者工具栏按钮等。 6. 测试和调试插件。 以下是一个简单的代码示例说明如何创建基本的火狐浏览器插件以及如何监听浏览器事件: ``` // 导入Firefox插件SDK const { data, pageMod, tabs } = require("sdk"); // 监听浏览器的页面加载事件 tabs.on("load", function(tab) { // 获取当前加载的页面的URL var currentUrl = tab.url; // 如果当前页面是特定网站中的页面 if (currentUrl.indexOf("example.com") != -1) { // TODO:添加插件功能代码 } }); // 创建插件的用户界面元素 var widget = require("sdk/widget").Widget({ id: "example-plugin", label: "Example Plugin", contentURL: data.url("icon.png"), onClick: function() { // TODO:添加插件点击事件的处理代码 } }); ``` 以上是一个简单的代码示例,可以根据需求添加更多功能。需要注意的是,在Firefox 57及以上版本中,新的WebExtensions API取代了旧的XUL和Firefox插件SDK,需要使用新的API进行插件开发。 ### 回答2: 要编写一个火狐浏览器插件,实现在浏览器运行时一直运行并在特定网页启动功能,插件需要从浏览器启动时就一直在后台运行,以下是基本步骤: 1.了解基本插件开发知识:熟悉火狐浏览器插件开发的相关文档和API,了解插件的基本结构、权限和事件。 2.创建插件项目:创建一个新的插件项目,可以使用HTML、CSS和JavaScript来开发插件的用户界面和功能。 3.注册插件事件:在插件代码中注册需要监听的事件,如浏览器启动事件和页面加载完成事件。 4.在浏览器启动时运行插件:使用插件的启动事件来确保插件在浏览器启动时运行,并进行相关初始化操作。 5.监听网页加载事件:在插件代码中监听浏览器页面加载完成事件,可以通过监听页面加载完成事件来判断是否是目标网页。 6.在特定网页运行功能:当检测到目标网页加载完成后,启动插件的功能代码,如修改网页内容、添加自定义功能按钮等。 7.持续后台运行:通过插件的事件监听机制,确保插件持续后台运行,并在需要时响应用户操作或网页事件。 8.测试和调试:在开发过程中,及时测试和调试插件代码,确保插件的功能和稳定性。 9.发布和安装:将插件打包为适用于火狐浏览器的安装文件,并发布到火狐插件市场或进行本地安装,供用户使用。 请注意,插件开发可能需要更多的技术知识和实践经验,这里只提供了一个基本的步骤指导。建议在开发之前,先阅读相关的插件开发文档和示例代码,以获得更深入的了解。 ### 回答3: 编写一个火狐浏览器插件,实现在浏览器运行的时候一直运行,并且当浏览器运行到指定网站的某一个网页后开始功能,插件从浏览器启动就一直在后台运行,可以按照以下步骤进行: 1. 获取并安装火狐浏览器扩展开发工具:从火狐官方网站下载并安装火狐浏览器扩展开发工具(WebExtensions),这是编写火狐浏览器插件所必需的工具。 2. 创建一个新的浏览器插件项目:打开火狐浏览器扩展开发工具后,点击"新建"按钮,填写项目名称和路径等相关信息,创建一个新的浏览器插件项目。 3. 编写插件的代码逻辑:在新建的插件项目中,打开manifest.json文件,这是一个描述插件基本信息和功能的文件。在其中设置"permissions"字段,声明需要的权限,如访问网页的权利。同时,设置"background"字段为一个background.js文件,用来定义插件的后台脚本。 4. 在background.js中编写插件的后台逻辑:在background.js文件中,编写代码实现插件的后台逻辑。可以使用浏览器API来监听浏览器运行状态、网页加载事件等,来实现插件在浏览器启动时一直在后台运行,并在浏览器运行到指定网站的某一个网页后开始功能。 例如,可以使用chrome.webNavigation.onCompleted事件来监听浏览器的网页加载完成事件,当加载完成的网页是指定网站的某一个网页时,触发插件的功能代码。 5. 打包和发布插件:完成编写插件代码后,使用火狐浏览器扩展开发工具提供的打包功能,将插件打包成一个可安装的扩展文件(.xpi文件),然后在火狐浏览器中安装和测试插件。 通过以上步骤,就可以编写一个火狐浏览器插件,实现在浏览器运行的时候一直运行,并且当浏览器运行到指定网站的某一个网页后开始功能,插件从浏览器启动就一直在后台运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值