9

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 typeDLL
  选择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.hnpdemo.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;  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()
{
}

修改项目属性

 

打开项目属性  

 

修改字符集设置为“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

9

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 typeDLL
  选择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.hnpdemo.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;  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()
{
}

修改项目属性

 

打开项目属性  

 

修改字符集设置为“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

9

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 typeDLL
  选择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.hnpdemo.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;  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()
{
}

修改项目属性

 

打开项目属性  

 

修改字符集设置为“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编程的更多相关文章

  1. fw: firefox plugin

    http://blog.csdn.net/fancycow/article/details/7261191 firefox的插件分两种类型,一种extension,叫扩展,一种是plugin,我们叫插 ...

  2. Firefox开发

    官方文档 First extension 目录结构 ➜ firefox tree . └── borderify └── manifest.json // 必须 directory, files ma ...

  3. firefox插件Firebug的使用教程

    什么是Firebug 从事了数年的Web开发工作,越来越觉得现在对WEB开发有了更高的要求.要写出漂亮的HTML代码:要编写精致的CSS样式表展示每个页面模块:要调试 javascript给页面增加一 ...

  4. ppapi,npapi

    PPAPI也就是Pepper Plugin API,是在原有网景NPAPI(Netscape Plugin API)基础上发展而来的.NPAPI是当今最流行的插件架构,几乎所有浏览器都支持,不过存在很 ...

  5. Zotero 使用指南

    DownLoad Page: https://onedrive.live.com/redir?resid=5084666E7B16AA85!109&authkey=!ABHQp7yfMnLpE ...

  6. 23、jQuery九类选择器/jQuery常用Method-API/jQuery常用Event-API

      1)掌握jQuery九类选择器及应用 2)掌握jQuery常用Method-API 3)掌握jQuery常用Event-API 一)jQuery九类选择器[参见jQueryAPI.chm手册] 目 ...

  7. selenium--大家庭介绍

    安装好配置环境后,开始我的selenium之旅.简单的了解一下色,selenium大家庭的组成. Selenium是ThoughtWorks专门为 Web 应用而开发的功能测试工具.Selenium使 ...

  8. ovirt user guide

    Contents [hide]  1 ⁠Accessing the User Portal 1.1 Logging in to the User Portal 1.2 Logging out of t ...

  9. (转)轻量级数据库 SQLite

    SQLite Expert – Personal Edition SQLite Expert 提供两个版本,分别是个人版和专业版.其中个人版是免费的,提供了大多数基本的管理功能. SQLite Exp ...

随机推荐

  1. 【Python】给程序加个进度条

    对于开发或者运维来说,使用 Python 去完成一些跑批任务,或者做一些监控事件是非常正常的情况.那么如何有效地监控任务的进度?除了在任务中加上 Log 外,还能不能有另一种方式来了解任务进展到哪一步 ...

  2. MySQL使用查询结果生成临时表

    MySQL中不支持对同一个表使用其查询结果更新or删除本表内数据(也就是update或delete后的where条件为针对相同表的select),解决方案是创建临时表做过度保存中间数据: 可以直接使用 ...

  3. Android 本地tomcat服务器接收处理手机上传的数据之环境搭建

    上一篇:Android 使用tomcat搭建HTTP文件下载服务器   本篇文章   环境:win7 + jdk1.7 + tomcat v8.0.53   工具: 1.Eclipse  Eclips ...

  4. Post Office Protocol --- pop协议

    https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol

  5. 小米2s线刷出现remote: partition table doesn't exist

    =================问题============ 小米2s线刷出现remote: partition table doesn't exist =================解决方案= ...

  6. JVM工具jinfo实践

    一.jinfo命令格式 命令格式: jinfo [option] <pid> Usage: jinfo [option] <pid> (to connect to runnin ...

  7. 【咸鱼教程】TextureMerger1.6.6 一:Egret MovieClip的制作和使用

    几个月没写代码了.然后突然用到TextureMerger,发现不会用序列图做动画了... 于是写下过程,以防忘记... MovieClip主要是用于游戏中的动画制作和播放.支持swf.gif.序列图等 ...

  8. linux系统下cpu信息的查看

    在Linux系统中,提供了proc文件系统显示系统的软硬件信息. 如果想了解系统中CPU的提供商和相关配置信息,则可以通过/proc/cpuinfo文件得到. 基于不同指令集(ISA)的CPU产生的/ ...

  9. linux shell中curl 发送post请求json格式问题

    今天在linux中使用curl发送一个post请求时,带有json的数据,在发送时发现json中的变量没有解析出来 如下 curl -i -X POST -H 'Content-type':'appl ...

  10. Android ScrollView嵌套ScrollView滚动的问题解决办法

    引用:http://mengsina.iteye.com/blog/1707464 http://fenglog.com/article.asp?id=449 Android ScrollView嵌套 ...