`
起跑线
  • 浏览: 27279 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

npapi开发

 
阅读更多
前面一段时间关注了用firebreath开发插件,但是感觉用起来不是那么得心应手,还是回到NPAPI开发插件上来。

本文根据NPAPI开发详解,Windows版进行开发,其中以VS2008为例进行开发,在VS2010中基本上是相同的。
必须的plugin sdk,将其解压到某个目录下,我这里是:D:\Users\zcf\Documents\My Program\2012。下面是创建插件的步骤:
1、创建项目

名称一定要以np开头,为了将来适应不同操作系统,最好全小写,不要太长,尽量控制在8字符内。本例定义为npmedia
位置指定到~plugin\sdk\samples
点击确定、下一步。选择dll、空项目:

点击完成,即建立好了一个空项目。如下图:

2、添加必要文件
首先,添加NPAPI SDK中的Common文件,共三个:


然后添加def文件:


编辑npdemo.def为:
[cpp] view plaincopyprint?
LIBRARY "npmedia" 
 
EXPORTS 
NP_GetEntryPoints @1 
NP_Initialize @2 
NP_Shutdown @3 
接着添加资源文件:


自动生成了resource.h和npdemo.rc。接着修改rc文件:



在图中的BLOCK内添加。注意!BLOCK 一定要为"040904e4"
VALUE "MIMEType", "application/media-plugin"

注意:有很多朋友反映按照本文的方法做出的插件在chrome中无法识别,问题就在于此处,将下一个字段改为如下形式就可以了:
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
这里补充一点:BLOCK  "040904e4"与后面VALUE "Translation", 0x409, 1252的含义是对应的,1252的十六进制表示就是4e4.Translation字段的第一个值表示语言409表示英语,而默认的804表示中文(简体)。Translation字段的第二个值表示所采用的字符集,1200(0X04B0)表示unicode,1252(0X04E4)表示多字节字符集,请参考:http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa381057%28v=vs.85%29.aspx。对于用中文环境开发来讲既可以用409(英语)也可以用804(中文)
BLOCK 的值对于firefox必须是 "040904e4",有朋友提到在chrome中这个BLOCK 的值可以是 "080404e4"
如果要支持chrome则字符集应设置为1252(0X04E4)如要及支持firefox又支持chrome,保险的做法是
BLOCK  "040904e4"对应"Translation", 0x409, 1252。

3、添加Plugin实现类



类名可以随便命名,但是必须继承自nsPluginInstanceBase。
编辑Plugin.h:
[cpp] view plaincopyprint?
#pragma once 
#include "pluginbase.h" 
 
class Plugin : 
public nsPluginInstanceBase 

private: 
NPP m_pNPInstance; 
NPBool m_bInitialized; 
public: 
Plugin(NPP pNPInstance); 
~Plugin(); 
 
NPBool init(NPWindow* pNPWindow) { m_bInitialized = TRUE; return TRUE;} 
void shut() { m_bInitialized = FALSE; } 
NPBool isInitialized() { return m_bInitialized; } 
}; 

编辑Plugin.cpp:

[cpp] view plaincopyprint?
#include "Plugin.h" 
 
////// functions ///////// 
NPError NS_PluginInitialize() 

return NPERR_NO_ERROR; 

 
void NS_PluginShutdown() 


 
nsPluginInstanceBase * NS_NewPluginInstance(nsPluginCreateData * aCreateDataStruct) 

if(!aCreateDataStruct) 
return NULL; 
 
Plugin * plugin = new Plugin(aCreateDataStruct->instance); 
return plugin; 

 
void NS_DestroyPluginInstance(nsPluginInstanceBase * aPlugin) 

if(aPlugin) 
delete (Plugin *)aPlugin; 

 
////// Plugin ///////// 
Plugin::Plugin(NPP pNPInstance):nsPluginInstanceBase(), 
m_pNPInstance(pNPInstance), 
m_bInitialized(FALSE) 


 
 
Plugin::~Plugin(void) 



4、修改项目属性


字符集选择为多字节字符(不是必须的),下面添加包含文件:



5、编译调试
完成了上述设置就可以进行编译调试了。
这是整个项目的结构:

生成该项目之后,可以在项目的Debug目录下找到dll文件,这里是npmedia.dll。可以写注册表注册这个dll,也可以将这个dll复制到用来测试插件的Firefox的profile目录下的plugins(没有则自行创建)文件夹中。
写注册表的方式:运行regedit,在HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins下建立一个子项,可随意命名:这里以@zcf.com/media为例,新建字符串项Path,其值为生成的dll的路径:

注意,这种方式在XP系统下测试通过,在WIN7系统下没有成功(注意:win7 64位应运行 %windir%\SysWOW64\Regedit.exe,打开的就是64注册表,可以在HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins下看到很多64位版本的插件,多谢网友 Jearol 告知)。还有一种方式就是设置项目属性,将输出目录指定为用来调试的Firefox相应profile目录下的plugins目录。这样就不用每次生成之后来回复制dll。如下图:

然后在Firefox地址栏中输入about:plugins就可以看到我们的插件了。
测试页面可以如下:
测试文件mediatest.html:
[html] view plaincopyprint?
<!doctype html> 
<html> 
<title>TEST WEB PAGE for media plugin</title> 
<body> 
<object type="application/media-plugin" width=200 height=150 ></object> 
<br /> 
</body> 
</html> 

关于调试插件:首先用Firefox打开测试页面,然后在VS2010中需要的地方设置断点,接着选择调试/附加到进程在弹出的对话框中选择plugin-container.exe,可能不止一个,注意根据其路径选择正确的那个。最后刷新测试页面就可以在你设置的断点的地方断下,进行调试。下一篇文章会有一个简单的实例展示这个调试过程。


转载至:http://blog.csdn.net/z6482/article/details/7660748
分享到:
评论

相关推荐

    NPAPI开发环境详解.pdf

    NPAPI开发环境详解.pdf

    NPAPI开发例子(包含sdk)

    NPAPI开发例子带sdk,不需要在额外寻找NPAPI库 npruntime编译通过 压缩包中包含VS编译NPAPI的指导说明

    利用npapi开发非IE插件

    介绍了开发NPAPI插件的详细流程和方法,包含插件的原理,插件在浏览器中的生命周期,NPClass的主要接口和数据结构,以及插件与js脚本的交互等。

    NPAPI 开发示例源码支持 js 异步回调

    NPAPI 开发示例源码支持 js 异步回调。 NPAPI开发示例VS2008版本源码 支持js异步回调,在chrome foxfire 360浏览器下次测试正常。 NPAPI开发

    NPAPI开发实例.docx

    NPAPI开发实例.docx 浏览器开发示例

    NPAPI开发示例源码支持js异步回调

    NPAPI开发示例VS2008版本源码 支持js异步回调,在chrome foxfire 360浏览器下次测试正常。

    NPAPI开发详解,Windows版

    NPAPI开发详解,Windows版

    NPAPI开发环境详解[汇编].pdf

    NPAPI开发环境详解[汇编].pdf

    NPAPI开发入门.doc

    NPAPI全称为:Netscape Plugin Application Programming Interface (NPAPI). NPAPI 是一个很经典的插件方案,用dll进行注入,用协定的API进行通信,用字符串描述插件能力。插件宿主(在这里就是浏览器…)会根据...

    NPAPI plugin开发手册(英文版)

    比较全的NPAPI手册,api也比较全.

    chrome 扩展npapi plugin实例

    npapi开发例子,支持Chrome和FireFox,运行时,复制debug下的npdemo.dll 到FireFox浏览器plugin文件夹下,如果是Chrome 需要设置 载入正在开发的扩展程序 选择debug文件夹就行,manifest.json文件已写好。

    使用xcode和NPAPI开发safari插件例子

    safari插件有两种类型:WebKit–Based Plug-ins和...而Netscape-Style Plug-ins插件使用的是firfox开发的插件库,苹果进行了封装,该类型的插件有一个好处就是跨浏览器,可以运行在safari,firfox等主流的浏览器中。

    Delphi开发npapi插件demo

    Delphi开发npapi插件的一个小例子,简单明白。 目前用的虽然少了,但是学习很有用 ~!!!!

    简单的NPAPI插件开发实例

    基于webkit框架的NPAPI插件开发,遵守NPAPI开发准则,实现Browser+plugin+NPAPI完美调用。

    NPAPI firefox插件开发详解

    详细介绍NAAPI开发过程,内有相关的源码下载链接。

    NPAPI开发教程

    首先,从这里下载mozilla源码。 然后,解压firefox-4.0.1.source.tar.bz2文件。...将 \firefox-4.0.1.source\mozilla-2.0\modules\plugin 目录解压缩出来,里面有我们开发NPAPI插件所需的所有资源。

    windows mobile webkit plugin开发指南

    webkit引擎下plugin开发指南,基于NPAPI标准接口,测试平台为window mobile6,本人测试的时播放wma音频文件插件,压缩文件内未提供源码,只提供了一个指南的文档和一个plugin框架源码,可根据实际情况添加需要的功能...

    NPAPI浏览器开发包

    是用NPAPI开发火狐或者谷歌浏览器插件的工具包,网上能够免费下载到,现在在CSDN中保留一份,供大家以后学习交流使用。

    浏览器插件npapi

    浏览器插件 npapi npruntime 浏览器控件,需要下载相应的SDK 压缩包有注释

    NPAPI插件开发代码预生成V0.1

    自动生成NPAPI开发框架代码的工具。前面一个生成的文件有错误,请不要下载,下载本文件。

Global site tag (gtag.js) - Google Analytics