zoukankan      html  css  js  c++  java
  • 【转发】NPAPI开发详解,Windows版

    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.sourcemozilla-2.0modulesplugin 目录解压缩出来,里面有我们开发NPAPI插件所需的所有资源。

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

    本例将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; return TRUE;}
    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”和“........asepublic
    alt text

     

    添加预编译宏 X86
    alt text

    现在可以编译了!

    3、注册、测试

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

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

  • 相关阅读:
    [模板] 循环数组的最大子段和
    [最短路][几何][牛客] [国庆集训派对1]-L-New Game
    [洛谷] P1866 编号
    1115 Counting Nodes in a BST (30 分)
    1106 Lowest Price in Supply Chain (25 分)
    1094 The Largest Generation (25 分)
    1090 Highest Price in Supply Chain (25 分)
    树的遍历
    1086 Tree Traversals Again (25 分)
    1079 Total Sales of Supply Chain (25 分 树
  • 原文地址:https://www.cnblogs.com/LeeWenjie/p/3469647.html
Copyright © 2011-2022 走看看