FireFox Plugin编程
本文通过多图组合,详细引导初学者开发NPAPI的浏览器插件。
如需测试开发完成的插件请参考http://mozilla.com.cn/kb/dev/A.88/
1. 准备工作
开发工具
本例使用的是visual studio 2008 英文版,下图是关于信息
Windows SDK
本例使用Windows7操作系统 这里下载SDK
NPAPISDK
本例使用的是Firefox4.0.1提供的SDK。
首先,从这里下载mozilla源码。然后,解压firefox-4.0.1.source.tar.bz2文件。
将 \firefox-4.0.1.source\mozilla-2.0\modules\plugin 目录解压缩出来,里面有我们开发NPAPI插件所需的所有资源。
为了方便大家使用,--这里--提供plugin.rar的下载。
本例将plugin目标解压到D:\code\下(后面统一使用绝对路径,以避免异意)
2. 创建Plugin
本着“有图有真相”的原则,下面将连续多图并配文字一步步创建、调试Plugin。图中画红圈的代表需要填写或者需要选择的地方。
创建项目
新建项目
Name项一定要以np开头,为了将来适应不同操作系统,最好全小写,不要太长,尽量控制在8字符内。
本例定义为npdemo
Location项定义到plugin\sdk\samples以便项目属性中用相对路径引用NPAPI的SDK
本例定义为d:\code\plugin\sdk\samples
向导
选择Application type为DLL
选择Empty project
添加文件
首先,添加NPAPI SDK中的Common文件
一共3个文件
然后,添加def文件
命名最好与项目一致
编辑npdemo.def为
1
2
3
4
5
6
|
LIBRARY "npdemo" EXPORTS NP_GetEntryPoints @1 NP_Initialize @2 NP_Shutdown @3 |
现在,添加资源
选择Version
自动生成了resource.h和npdemo.rc。由于要在版本信息中加项,所以手工npdemo.rc
选择“Y”
在图中的BLOCK中添加。注意!BLOCK 一定要是"040904e4"
VALUE "MIMEType", "application/demo-plugin"
这里顺便说一下,MIMEType是plugin的唯一标示,需要自己定义
通常的格式是"application/“+ [plugin name]
本例中定义为"application/demo-plugin"
下图是rc文件数据项与plugin数据项(about:plugins 中)的对应关系
下面添加最关键的部分:Plugin实现类
类名可以随便起,本例命名为CPlugin
但是一定要继承自nsPluginInstanceBace
修改Plugin.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#pragma once #include "pluginbase.h" class CPlugin : public nsPluginInstanceBase { private : NPP m_pNPInstance; NPBool m_bInitialized; public : CPlugin(NPP pNPInstance); ~CPlugin(); NPBool init(NPWindow* pNPWindow) { m_bInitialized = TRUE; return TRUE;} void shut() { m_bInitialized = FALSE; } NPBool isInitialized() { return m_bInitialized; } }; |
修改Plugin.cpp
其中实现了4个全局函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include "plugin.h" ////// functions ///////// NPError NS_PluginInitialize() { return NPERR_NO_ERROR; } void NS_PluginShutdown() { } nsPluginInstanceBase * NS_NewPluginInstance(nsPluginCreateData * aCreateDataStruct) { if (!aCreateDataStruct) return NULL; CPlugin * plugin = new CPlugin(aCreateDataStruct->instance); return plugin; } void NS_DestroyPluginInstance(nsPluginInstanceBase * aPlugin) { if (aPlugin) delete (CPlugin *)aPlugin; } ////// CPlugin ///////// CPlugin::CPlugin(NPP pNPInstance) : nsPluginInstanceBase(), m_pNPInstance(pNPInstance), m_bInitialized(FALSE) { } CPlugin::~CPlugin() { } |
修改项目属性
打开项目属性
修改字符集设置为“Use Multi-Byte Character Set”
添加搜索目录 “....\include”和“........\base\public”
添加预编译宏 X86
现在可以编译了!
3、注册、测试
本例编译后,在D:\code\plugin\sdk\samples\npdemo\Debug生成npdemo.dll
打开注册表,在HKEY_CURRENT_USER\SOFTWARE\MozillaPlugins下新建子项@mozilla.com.cn/demo
并新建字符串数据“Path”设值为D:\code\plugin\sdk\samples\npdemo\Debug\npdemo.dll
打开火狐浏览器 在地址栏输入“about:plugins” 如果在plugin列表中有本例的npdemo.dll及说明我们的plugin示例已经成功完成
简单的测试页面:
1
2
3
4
5
6
7
|
< HTML > < HEAD > </ HEAD > < BODY > < embed type = "application/demo-plugin" > </ BODY > </ HTML > |
特别注意
如果在实际部署中使用安装文件安装plugin,并用注册表的方式注册。那么就不需要重启火狐,只要在页面中执行 navigator.plugins.refresh(false); 然后刷新页面即可使用刚安装的plugin
jiaofeng601, +479
9人支持,来自 Meteor、猪爪、hanyuxinting更多
本文通过多图组合,详细引导初学者开发NPAPI的浏览器插件。
如需测试开发完成的插件请参考http://mozilla.com.cn/kb/dev/A.88/
1. 准备工作
开发工具
本例使用的是visual studio 2008 英文版,下图是关于信息
Windows SDK
本例使用Windows7操作系统 这里下载SDK
NPAPISDK
本例使用的是Firefox4.0.1提供的SDK。
首先,从这里下载mozilla源码。然后,解压firefox-4.0.1.source.tar.bz2文件。
将 \firefox-4.0.1.source\mozilla-2.0\modules\plugin 目录解压缩出来,里面有我们开发NPAPI插件所需的所有资源。
为了方便大家使用,--这里--提供plugin.rar的下载。
本例将plugin目标解压到D:\code\下(后面统一使用绝对路径,以避免异意)
2. 创建Plugin
本着“有图有真相”的原则,下面将连续多图并配文字一步步创建、调试Plugin。图中画红圈的代表需要填写或者需要选择的地方。
创建项目
新建项目
Name项一定要以np开头,为了将来适应不同操作系统,最好全小写,不要太长,尽量控制在8字符内。
本例定义为npdemo
Location项定义到plugin\sdk\samples以便项目属性中用相对路径引用NPAPI的SDK
本例定义为d:\code\plugin\sdk\samples
向导
选择Application type为DLL
选择Empty project
添加文件
首先,添加NPAPI SDK中的Common文件
一共3个文件
然后,添加def文件
命名最好与项目一致
编辑npdemo.def为
1
2
3
4
5
6
|
LIBRARY "npdemo" EXPORTS NP_GetEntryPoints @1 NP_Initialize @2 NP_Shutdown @3 |
现在,添加资源
选择Version
自动生成了resource.h和npdemo.rc。由于要在版本信息中加项,所以手工npdemo.rc
选择“Y”
在图中的BLOCK中添加。注意!BLOCK 一定要是"040904e4"
VALUE "MIMEType", "application/demo-plugin"
这里顺便说一下,MIMEType是plugin的唯一标示,需要自己定义
通常的格式是"application/“+ [plugin name]
本例中定义为"application/demo-plugin"
下图是rc文件数据项与plugin数据项(about:plugins 中)的对应关系
下面添加最关键的部分:Plugin实现类
类名可以随便起,本例命名为CPlugin
但是一定要继承自nsPluginInstanceBace
修改Plugin.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#pragma once #include "pluginbase.h" class CPlugin : public nsPluginInstanceBase { private : NPP m_pNPInstance; NPBool m_bInitialized; public : CPlugin(NPP pNPInstance); ~CPlugin(); NPBool init(NPWindow* pNPWindow) { m_bInitialized = TRUE; return TRUE;} void shut() { m_bInitialized = FALSE; } NPBool isInitialized() { return m_bInitialized; } }; |
修改Plugin.cpp
其中实现了4个全局函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include "plugin.h" ////// functions ///////// NPError NS_PluginInitialize() { return NPERR_NO_ERROR; } void NS_PluginShutdown() { } nsPluginInstanceBase * NS_NewPluginInstance(nsPluginCreateData * aCreateDataStruct) { if (!aCreateDataStruct) return NULL; CPlugin * plugin = new CPlugin(aCreateDataStruct->instance); return plugin; } void NS_DestroyPluginInstance(nsPluginInstanceBase * aPlugin) { if (aPlugin) delete (CPlugin *)aPlugin; } ////// CPlugin ///////// CPlugin::CPlugin(NPP pNPInstance) : nsPluginInstanceBase(), m_pNPInstance(pNPInstance), m_bInitialized(FALSE) { } CPlugin::~CPlugin() { } |
修改项目属性
打开项目属性
修改字符集设置为“Use Multi-Byte Character Set”
添加搜索目录 “....\include”和“........\base\public”
添加预编译宏 X86
现在可以编译了!
3、注册、测试
本例编译后,在D:\code\plugin\sdk\samples\npdemo\Debug生成npdemo.dll
打开注册表,在HKEY_CURRENT_USER\SOFTWARE\MozillaPlugins下新建子项@mozilla.com.cn/demo
并新建字符串数据“Path”设值为D:\code\plugin\sdk\samples\npdemo\Debug\npdemo.dll
打开火狐浏览器 在地址栏输入“about:plugins” 如果在plugin列表中有本例的npdemo.dll及说明我们的plugin示例已经成功完成
简单的测试页面:
1
2
3
4
5
6
7
|
< HTML > < HEAD > </ HEAD > < BODY > < embed type = "application/demo-plugin" > </ BODY > </ HTML > |
特别注意
如果在实际部署中使用安装文件安装plugin,并用注册表的方式注册。那么就不需要重启火狐,只要在页面中执行 navigator.plugins.refresh(false); 然后刷新页面即可使用刚安装的plugin
本文通过多图组合,详细引导初学者开发NPAPI的浏览器插件。
如需测试开发完成的插件请参考http://mozilla.com.cn/kb/dev/A.88/
1. 准备工作
开发工具
本例使用的是visual studio 2008 英文版,下图是关于信息
Windows SDK
本例使用Windows7操作系统 这里下载SDK
NPAPISDK
本例使用的是Firefox4.0.1提供的SDK。
首先,从这里下载mozilla源码。然后,解压firefox-4.0.1.source.tar.bz2文件。
将 \firefox-4.0.1.source\mozilla-2.0\modules\plugin 目录解压缩出来,里面有我们开发NPAPI插件所需的所有资源。
为了方便大家使用,--这里--提供plugin.rar的下载。
本例将plugin目标解压到D:\code\下(后面统一使用绝对路径,以避免异意)
2. 创建Plugin
本着“有图有真相”的原则,下面将连续多图并配文字一步步创建、调试Plugin。图中画红圈的代表需要填写或者需要选择的地方。
创建项目
新建项目
Name项一定要以np开头,为了将来适应不同操作系统,最好全小写,不要太长,尽量控制在8字符内。
本例定义为npdemo
Location项定义到plugin\sdk\samples以便项目属性中用相对路径引用NPAPI的SDK
本例定义为d:\code\plugin\sdk\samples
向导
选择Application type为DLL
选择Empty project
添加文件
首先,添加NPAPI SDK中的Common文件
一共3个文件
然后,添加def文件
命名最好与项目一致
编辑npdemo.def为
1
2
3
4
5
6
|
LIBRARY "npdemo" EXPORTS NP_GetEntryPoints @1 NP_Initialize @2 NP_Shutdown @3 |
现在,添加资源
选择Version
自动生成了resource.h和npdemo.rc。由于要在版本信息中加项,所以手工npdemo.rc
选择“Y”
在图中的BLOCK中添加。注意!BLOCK 一定要是"040904e4"
VALUE "MIMEType", "application/demo-plugin"
这里顺便说一下,MIMEType是plugin的唯一标示,需要自己定义
通常的格式是"application/“+ [plugin name]
本例中定义为"application/demo-plugin"
下图是rc文件数据项与plugin数据项(about:plugins 中)的对应关系
下面添加最关键的部分:Plugin实现类
类名可以随便起,本例命名为CPlugin
但是一定要继承自nsPluginInstanceBace
修改Plugin.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#pragma once #include "pluginbase.h" class CPlugin : public nsPluginInstanceBase { private : NPP m_pNPInstance; NPBool m_bInitialized; public : CPlugin(NPP pNPInstance); ~CPlugin(); NPBool init(NPWindow* pNPWindow) { m_bInitialized = TRUE; return TRUE;} void shut() { m_bInitialized = FALSE; } NPBool isInitialized() { return m_bInitialized; } }; |
修改Plugin.cpp
其中实现了4个全局函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include "plugin.h" ////// functions ///////// NPError NS_PluginInitialize() { return NPERR_NO_ERROR; } void NS_PluginShutdown() { } nsPluginInstanceBase * NS_NewPluginInstance(nsPluginCreateData * aCreateDataStruct) { if (!aCreateDataStruct) return NULL; CPlugin * plugin = new CPlugin(aCreateDataStruct->instance); return plugin; } void NS_DestroyPluginInstance(nsPluginInstanceBase * aPlugin) { if (aPlugin) delete (CPlugin *)aPlugin; } ////// CPlugin ///////// CPlugin::CPlugin(NPP pNPInstance) : nsPluginInstanceBase(), m_pNPInstance(pNPInstance), m_bInitialized(FALSE) { } CPlugin::~CPlugin() { } |
修改项目属性
打开项目属性
修改字符集设置为“Use Multi-Byte Character Set”
添加搜索目录 “....\include”和“........\base\public”
添加预编译宏 X86
现在可以编译了!
3、注册、测试
本例编译后,在D:\code\plugin\sdk\samples\npdemo\Debug生成npdemo.dll
打开注册表,在HKEY_CURRENT_USER\SOFTWARE\MozillaPlugins下新建子项@mozilla.com.cn/demo
并新建字符串数据“Path”设值为D:\code\plugin\sdk\samples\npdemo\Debug\npdemo.dll
打开火狐浏览器 在地址栏输入“about:plugins” 如果在plugin列表中有本例的npdemo.dll及说明我们的plugin示例已经成功完成
简单的测试页面:
1
2
3
4
5
6
7
|
< HTML > < HEAD > </ HEAD > < BODY > < embed type = "application/demo-plugin" > </ BODY > </ HTML > |
特别注意
如果在实际部署中使用安装文件安装plugin,并用注册表的方式注册。那么就不需要重启火狐,只要在页面中执行 navigator.plugins.refresh(false); 然后刷新页面即可使用刚安装的plugin
FireFox Plugin编程的更多相关文章
- fw: firefox plugin
http://blog.csdn.net/fancycow/article/details/7261191 firefox的插件分两种类型,一种extension,叫扩展,一种是plugin,我们叫插 ...
- Firefox开发
官方文档 First extension 目录结构 ➜ firefox tree . └── borderify └── manifest.json // 必须 directory, files ma ...
- firefox插件Firebug的使用教程
什么是Firebug 从事了数年的Web开发工作,越来越觉得现在对WEB开发有了更高的要求.要写出漂亮的HTML代码:要编写精致的CSS样式表展示每个页面模块:要调试 javascript给页面增加一 ...
- ppapi,npapi
PPAPI也就是Pepper Plugin API,是在原有网景NPAPI(Netscape Plugin API)基础上发展而来的.NPAPI是当今最流行的插件架构,几乎所有浏览器都支持,不过存在很 ...
- Zotero 使用指南
DownLoad Page: https://onedrive.live.com/redir?resid=5084666E7B16AA85!109&authkey=!ABHQp7yfMnLpE ...
- 23、jQuery九类选择器/jQuery常用Method-API/jQuery常用Event-API
1)掌握jQuery九类选择器及应用 2)掌握jQuery常用Method-API 3)掌握jQuery常用Event-API 一)jQuery九类选择器[参见jQueryAPI.chm手册] 目 ...
- selenium--大家庭介绍
安装好配置环境后,开始我的selenium之旅.简单的了解一下色,selenium大家庭的组成. Selenium是ThoughtWorks专门为 Web 应用而开发的功能测试工具.Selenium使 ...
- ovirt user guide
Contents [hide] 1 Accessing the User Portal 1.1 Logging in to the User Portal 1.2 Logging out of t ...
- (转)轻量级数据库 SQLite
SQLite Expert – Personal Edition SQLite Expert 提供两个版本,分别是个人版和专业版.其中个人版是免费的,提供了大多数基本的管理功能. SQLite Exp ...
随机推荐
- 【IOS】iOS 企业版应用网站下载plist文件
如果想从自己公司的网站上下载安装应用,首先 准备一个 index.html文件 <!DOCTYPE html> <html lang="zh-cn"> &l ...
- c++ map使用问题【运行结果不一样】
map经常把指针作为key,这种情况下. 我们经常会很自然的以为,如果要取元素时,会按照我们存的顺序拿到元素. 但是事实上不是这样的,因为map取得时候是按key的大小排序的,而如果用指针作为key, ...
- 关于array.sort(array,array)
// 基于第一个 System.Array 中的关键字,使用每个关键字的 System.IComparable 实现,对两个一维 System.Array // 对象(一个包含关键字,另一个包含对应的 ...
- C# NameValueCollection集合 (转)
1.NameValueCollection类集合是基于 NameObjectCollectionBase 类. 但与 NameObjectCollectionBase 不同,该类在一个键下存储多个字符 ...
- dig命令安装
yum -y install bind-utils Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具 查找yahoo.com的A记录:(此处一定是域而不是 ...
- 关于servlet3.0中的异步servlet
刚看了一下维基百科上的介绍,servlet3.0是2009年随着JavaEE6.0发布的: 到现在已经有六七年的时间了,在我第一次接触java的时候(2011年),servlet3.0就已经出现很久了 ...
- 《代码大全》阅读笔记-33-个人性格(personal character)
很多好的编程做法都能减轻你的大脑灰质细胞(指脑力)的负担. 将系统"分解",是为了使之易于理解("设计的层次"). 进行审查.评审和测试正是为了减少人为失误.如 ...
- NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译
NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译 第一章第二节Mapping a class with XML ...
- 关于nagios系统下使用shell脚本自定义监控插件的编写
在自已编写监控插件之前我们首先需要对nagios监控原理有一定的了解 Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控.检测功能都是通过各种插件来完成的. 启动Nagios ...
- 【CF819C】Mister B and Beacons on Field 数学
[CF819C]Mister B and Beacons on Field 题意:外星人盯上了Farmer Jack的农场!我们假设FJ的农场是一个二维直角坐标系,FJ的家在原点.外星人向FJ的农场上 ...