NPAPI开发详解,Windows版(火狐)

本文通过多图组合,详细引导初学者开发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. LIBRARY "npdemo"
  2.      
  3. EXPORTS
  4.     NP_GetEntryPoints   @1
  5.     NP_Initialize       @2
  6.     NP_Shutdown         @3
复制代码
复制代码
现在,添加资源
选择 Version
自动生成了 resource.hnpdemo.rc。由于要在版本信息中加项,所以手工 npdemo.rc
选择“Y”
在图中的BLOCK中添加。注意! BLOCK 一定要是" 040904e4"
  1. VALUE "MIMEType", "application/demo-plugin"
复制代码
这里顺便说一下,MIMEType是plugin的唯一标示,需要自己定义
通常的格式是"application/“+ [plugin name]
本例中定义为"application/demo-plugin"
下图是rc文件数据项与plugin数据项(about:plugins 中)的对应关系 
下面添加最关键的部分:Plugin实现类

类名可以随便起,本例命名为CPlugin
但是一定要继承自nsPluginInstanceBace
修改Plugin.h
  1. #pragma once
  2. #include "pluginbase.h"
  3.      
  4. class CPlugin : public nsPluginInstanceBase
  5. {
  6. private:
  7.   NPP m_pNPInstance;
  8.   NPBool m_bInitialized;
  9. public:
  10.   CPlugin(NPP pNPInstance);
  11.   ~CPlugin();
  12.      
  13.   NPBool init(NPWindow* pNPWindow)  {  m_bInitialized = TRUE;  return TRUE;}
  14.   void shut()  {  m_bInitialized = FALSE;  }
  15.   NPBool isInitialized()  {  return m_bInitialized;  }
  16. };
复制代码
复制代码
修改Plugin.cpp
其中实现了4个全局函数
  1. #include "plugin.h"
  2.      
  3.      
  4. // functions /
  5. NPError NS_PluginInitialize()
  6. {
  7.   return NPERR_NO_ERROR;
  8. }
  9.      
  10. void NS_PluginShutdown()
  11. {
  12. }
  13.      
  14. nsPluginInstanceBase * NS_NewPluginInstance(nsPluginCreateData * aCreateDataStruct)
  15. {
  16.   if(!aCreateDataStruct)
  17.     return NULL;
  18.      
  19.   CPlugin * plugin = new CPlugin(aCreateDataStruct->instance);
  20.   return plugin;
  21. }
  22.      
  23. void NS_DestroyPluginInstance(nsPluginInstanceBase * aPlugin)
  24. {
  25.   if(aPlugin)
  26.     delete (CPlugin *)aPlugin;
  27. }
  28. // CPlugin /
  29. CPlugin::CPlugin(NPP pNPInstance) : nsPluginInstanceBase(),
  30.   m_pNPInstance(pNPInstance),
  31.   m_bInitialized(FALSE)
  32. {
  33. }
  34.      
  35. CPlugin::~CPlugin()
  36. {
  37. }
复制代码
复制代码
修改项目属性
打开项目属性 
修改字符集设置为“ 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. <HTML>
  2.     <HEAD>
  3.     </HEAD>
  4.     <BODY>
  5.         <embed type="application/demo-plugin">
  6.     </BODY>
  7. </HTML>
复制代码
特别注意
如果在实际部署中使用安装文件安装plugin,并用注册表的方式注册。那么就 不需要重启火狐 ,只要在页面中执行  navigator.plugins.refresh(false);  然后刷新页面即可使用刚安装的plugin
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值