NPAPI开发详解,Windows版

作者: littlesu 分类: 浏览器插件开发 发布时间: 2013-01-18 16:44 ė2,008 浏览数 6没有评论
文章转自王牌软件
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)

本文通过多图组合,详细引导初学者开发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.sourcemozilla-2.0modulesplugin 目录解压缩出来,里面有我们开发NPAPI插件所需的所有资源。

为了方便大家使用,这里提供plugin.zip的下载。

本例将plugin目标解压到D:code下(后面统一使用绝对路径,以避免异意)

2. 创建Plugin

本着“有图有真相”的原则,下面将连续多图并配文字一步步创建、调试Plugin。图中画红圈的代表需要填写或者需要选择的地方。

创建项目

新建项目  alt text

 

Name项一定要以np开头,为了将来适应不同操作系统,最好全小写,不要太长,尽量控制在8字符内。
  本例定义为npdemo
  Location项定义到pluginsdksamples以便项目属性中用相对路径引用NPAPI的SDK
  本例定义为d:codepluginsdksamples
  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;  returnTRUE;}
  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”和“……..basepublic
  alt text

 

添加预编译宏 X86
  alt text

现在可以编译了!

 

3、注册、测试

本例编译后,在D:codepluginsdksamplesnpdemoDebug生成npdemo.dll

打开注册表,在HKEY_CURRENT_USERSOFTWAREMozillaPlugins下新建子项@mozilla.com.cn/demo
  并新建字符串数据“Path”设值为D:codepluginsdksamplesnpdemoDebugnpdemo.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



只回答业务咨询点击这里给我发消息 点击这里给我发消息

王牌软件,兼职软件设计,软件修改,毕业设计。

本文出自 王牌软件,转载时请注明出处及相应链接。

本文永久链接: http://www.softwareace.cn/?p=89

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">


Ɣ回顶部

无觅相关文章插件,快速提升流量