前面一段时间关注了用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开发例子(包含sdk)"这个压缩包中,包含了开发NPAPI插件所需的一些关键文件和资源,使得开发者无需额外寻找NPAPI库就能开始开发工作。这极大地简化了开发流程,节省了时间。 1. **npruntime**: 这是NPAPI...
NPAPI开发环境详解.pdf
NPAPI 开发详解,Windows 版本 NPAPI(Netscape Plugin Application Programming Interface)是一种插件架构,用于在浏览器中插入插件,实现丰富的互联网应用程序。下面是 NPAPI 开发详解,Windows 版本的知识点: ...
这个"NPAPI 开发示例源码支持 js 异步回调"是针对NPAPI的一个实践案例,主要展示了如何通过NPAPI使浏览器插件与JavaScript进行异步通信。异步回调是编程中常见的一种处理机制,尤其是在网络操作或者耗时任务中,它能...
### NPAPI开发教程知识点概述 #### 一、准备工作 **1.1 开发工具** - **Visual Studio 2008**: 本教程使用的开发工具是Visual Studio 2008英文版。确保安装了相应的Visual Studio环境及其必要的组件。 **1.2 ...
NPAPI开发环境详解[汇编].pdf
NPAPI(Netscape Plugin Application Programming Interface)是 Netscape 公司在1990年代中期为浏览器开发插件而设计的一种插件接口。它允许开发者创建能够在多种浏览器上运行的插件,如Adobe Flash、Java等。然而...
【NPAPI插件开发详解】 NPAPI(Netscape Plugin Application Programming Interface)是一种早期的浏览器插件技术,它允许开发者创建跨平台的浏览器插件,为浏览器提供额外的功能。尽管NPAPI在现代浏览器中逐渐被弃...
### NPAPI插件开发手册概览 NPAPI(Netscape Plugin Application Programming Interface)是用于在Web浏览器中扩展功能的一种接口标准,最初由Netscape公司开发,后被多个浏览器支持,包括Firefox、Chrome(早期...
**Delphi开发NPAPI插件Demo详解** NPAPI(Netscape Plugin Application Programming Interface)是一种老式的插件架构,主要用于浏览器扩展,允许第三方开发者创建能在多种浏览器上运行的插件。尽管现在已经被更...
safari插件有两种类型:WebKit–Based Plug-ins和...而Netscape-Style Plug-ins插件使用的是firfox开发的插件库,苹果进行了封装,该类型的插件有一个好处就是跨浏览器,可以运行在safari,firfox等主流的浏览器中。
NPAPI开发包通常包含了一系列的库、头文件、文档和示例代码,帮助开发者理解如何构建和实现NPAPI插件。在提供的压缩包中,"winsdk_web.exe"可能是一个Windows SDK(Software Development Kit)的安装程序,用于提供...
在Qt5中使用Npapi开发插件,可以利用Qt的灵活性和便利性,使代码更易于管理和维护。 为了构建这样的插件,你需要遵循以下步骤: 1. **环境配置**:确保你已安装了MSVC2015编译器和Qt5开发环境。同时,还需要安装...
标题中的"NPAPI实例代码"指的是一个具体的编程示例,它展示了如何利用NPAPI开发一个浏览器插件。这样的实例通常包括了创建插件的基本结构、与浏览器通信的接口以及处理浏览器事件的逻辑。VS2013(Visual Studio 2013...
为了开发NPAPI插件,开发者通常需要下载相应的SDK(Software Development Kit),这个SDK通常包含开发库、头文件、示例代码以及必要的文档,帮助开发者理解和实现NPAPI接口。在给定的压缩包中,"npcodeproject.dll...
基于NPAPI开发的安全输入控件可以在多种浏览器环境下工作,如Firefox、Chrome、Opera和Maxthon,这意味着它具有良好的兼容性和广泛的应用场景。 NPAPI插件的工作原理是,当浏览器加载包含特定MIME类型的网页时,会...
webkit引擎下plugin开发指南,基于NPAPI标准接口,测试平台为window mobile6,本人测试的时播放wma音频文件插件,压缩文件内未提供源码,只提供了一个指南的文档和一个plugin框架源码,可根据实际情况添加需要的功能...