博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转发】NPAPI开发详解,Windows版
阅读量:5247 次
发布时间:2019-06-14

本文共 3050 字,大约阅读时间需要 10 分钟。

NPAPI开发详解,Windows版

9

, +479

9人支持,来自、、 、 、、、、

 

本文通过多图组合,详细引导初学者开发NPAPI的浏览器插件。

如需测试开发完成的插件请参考

1. 准备工作

开发工具

本例使用的是visual studio 2008 英文版,下图是关于信息关于信息

Windows SDK

本例使用Windows7操作系统

NPAPISDK

本例使用的是Firefox4.0.1提供的SDK。

首先,从。然后,解压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。图中画红圈的代表需要填写或者需要选择的地方。

创建项目

新建项目 alt text

 

Name项一定要以np开头,为了将来适应不同操作系统,最好全小写,不要太长,尽量控制在8字符内。

本例定义为npdemo
Location项定义到plugin\sdk\samples以便项目属性中用相对路径引用NPAPI的SDK
本例定义为d:\code\plugin\sdk\samples
alt text

 

向导

alt text

 

选择Application typeDLL

选择Empty project
alt text

 

添加文件

首先,添加NPAPI SDK中的Common文件

alt text

 

一共3个文件

alt text

 

然后,添加def文件

alt text

 

命名最好与项目一致

alt text

 

编辑npdemo.def为

1
2
3
4
5
6
LIBRARY
"npdemo"
 
EXPORTS
NP_GetEntryPoints @1
NP_Initialize @2
NP_Shutdown @3
 

 

现在,添加资源

alt text

 

选择Version

alt text

 

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

alt text

 

选择“Y”

alt text

 

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

VALUE "MIMEType", "application/demo-plugin"
这里顺便说一下,MIMEType是plugin的唯一标示,需要自己定义
通常的格式是"application/“+ [plugin name]
本例中定义为"application/demo-plugin"
alt text

 

下图是rc文件数据项与plugin数据项(about:plugins 中)的对应关系

alt text

 

下面添加最关键的部分:Plugin实现类

alt text
alt text

 

类名可以随便起,本例命名为CPlugin

但是一定要继承自nsPluginInstanceBace
alt text

 

修改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()
{
}
 

修改项目属性

 

打开项目属性 alt text

 

修改字符集设置为“Use Multi-Byte Character Set

alt text

 

添加搜索目录 “....\include”和“........\base\public

alt text

 

添加预编译宏 X86

alt text

现在可以编译了!

 

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

alt text

 

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

alt text

 

简单的测试页面: 

1
2
3
4
5
6
7
<
HTML
>
<
HEAD
>
</
HEAD
>
<
BODY
>
<
embed
type
=
"application/demo-plugin"
>
</
BODY
>
</
HTML
>

特别注意

如果在实际部署中使用安装文件安装plugin,并用注册表的方式注册。那么就不需要重启火狐,只要在页面中执行 navigator.plugins.refresh(false); 然后刷新页面即可使用刚安装的plugin

转载于:https://www.cnblogs.com/LeeWenjie/p/3469647.html

你可能感兴趣的文章
老鸟的Python入门教程
查看>>
Ubuntu下非常给力的下载工具--uget+aria2
查看>>
Nginx配置
查看>>
棋盘覆盖问题
查看>>
vs2003无法调试 解决方法收藏
查看>>
.net-一般处理程序及生命周期
查看>>
linux sed命令
查看>>
[Cycle.js] Making our toy DOM Driver more flexible
查看>>
LeetCode 160. Intersection of Two Linked Lists
查看>>
html标签的嵌套规则
查看>>
10个实用的但偏执的Java编程技术
查看>>
sql语句查询出数据重复,取唯一数据
查看>>
GitHub上史上最全的Android开源项目分类汇总
查看>>
后台运行命令:&amp;和nohup command &amp; 以及关闭、查看后台任务
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>
类加载机制
查看>>
c# 读/写文件(各种格式)
查看>>
iOS中用UIWebView的loadHTMLString后图片和文字失调解决方法
查看>>
【校招面试 之 C/C++】第24题 C++ STL(六)之Map
查看>>