NPAPI开发详解,Windows版
原文:http://mozilla.com.cn/post/21666/
本文通过多图组合,详细引导初学者开发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
25条评论 • 2011-07-11 10:57
NPAPI开发详解,Windows版相关推荐
- 百度地图api开发详解(android版).pdf,百度地图API开发指南原版.pdf
百度地图API开发指南原版 百度地图 API 开发指南 百度地图 API 开发指南 目录 简介 3 什么是百度地图 API 3 面向的读者 3 获取 API 3 开发移动平台上的地图应用 3 兼容性 ...
- 微信端php 开发技术要求,微信第三方平台开发详解——PHP版
申请第三方平台,这个很简单直接按照提示填写,下面的授权事件接收URL中获取的component_verify_ticket是会过期的,所以不要只获取一次,缓存起来每10分钟会发送一次,每1小时会更新一 ...
- 豆邮windows客户端(第三方)开发详解
豆邮windows客户端(第三方)开发详解 "豆邮",是社区网站"豆瓣"的一个类似私信的功能模块.在豆瓣官网,"豆邮"曾一度被改为" ...
- 详解Windows RT版和Win8标准版/专业版/企业版区别
详解Windows RT版和Win8标准版/专业版/企业版区别 Win8版本到底有哪些? Windows 8的各版本有什么不同.差别和区别? Win8旗舰版有木有? Win8最好的版本是哪个? 我应该 ...
- 《HTML5 canvas开发详解(第2版)》——1.9 HTML5 Canvas对象
本节书摘来自异步社区<HTML5 canvas开发详解(第2版)>一书中的第1章,第1.9节,作者: [美]Steve Fulton , Jeff Fulton 更多章节内容可以访问云栖社 ...
- 《HTML5 canvas开发详解(第2版)》——1.3 本书使用的基础HTML页面
本节书摘来自异步社区<HTML5 canvas开发详解(第2版)>一书中的第1章,第1.3节,作者: [美]Steve Fulton , Jeff Fulton 更多章节内容可以访问云栖社 ...
- 《Linux 设备驱动开发详解(第2版)》——1.4 Linux设备驱动
本节书摘来自异步社区<Linux 设备驱动开发详解(第2版)>一书中的第1章,第1.1节,作者:宋宝华著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.4 L ...
- Linux设备驱动开发详解 第3版 (即 Linux设备驱动开发详解 基于最新的Linux 4 0内核 )前言
Linux从未停歇脚步.Linus Torvalds,世界上最伟大的程序员之一,Linux内核的创始人,Git的缔造者,仍然在没日没夜的合并补丁,升级内核.做技术,从来没有终南捷径,拼的就是坐冷板凳的 ...
- 《Linux设备驱动开发详解(第2版)》隆重出版
Linux设备驱动开发详解(第2版)(前一版狂销3万册,畅销书最新升级) [新品] 点击看大图 基本信息 * 作者: 宋宝华 * 出版社:人民邮电出版社 * ISBN:97 ...
最新文章
- 4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)
- 从零开始写项目第七篇【搭建Linux环境】
- mybatis,mysql,datasource,dpcb连接池的关系
- linux fork脚本,shell调度脚本的三种不同方法(fork, exec, source)
- 银行核心系统是什么?
- python免费课件-python入门ppt下载
- 费马小定理 费马大定理 数论
- 短视频SDK测试tips
- php手册3.1,thinkphp3.1手册下载|
- python编码格式 兼容中文_python中文编码(汉字乱码问题解决方案)
- 该网页无法正常运作 目前无法处理此请求HTTP ERROR 500?
- 【51nod】---1278 相离的圆(二分排序)
- 2021年装载机司机(建筑特殊工种)找解析及装载机司机(建筑特殊工种)考试总结
- 多测师拱墅校区肖sir_高级金牌讲师_html讲解
- 2055 到淄博旅游
- 系统准备工具 (Sysprep.exe) 实现OOBE用法
- 小型电梯尺寸_住宅电梯最小尺寸多大 住宅电梯尺寸标准
- FormData对象用法
- 【ZT】凡客诚品CPS广告付费模式研究
- 通过FEDOT将AutoML用于时间序列数据
热门文章
- No module named MNIST_写给小白的用fashion-mnist入门机器学习和深度学习的简单项目(非常全面!!!)...
- 经典面试题:给两个序列如何构造一棵二叉树
- pycharm如何改为中文显示?
- 数据结构:字典树的基本使用
- python安装了怎么使用_Python PyCharm 安装与简单使用
- 用java模仿钉钉_java接入钉钉机器人(附源码)
- 足不出户完成交付独家交付秘籍(第二回)
- 第二期阿里巴巴 Java Meetup 来北京了。你来么?
- html页面的header,HTML5教程 | HTML5 header和footer元素
- android preference tab,Android SharedPreference - TabHost问题