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.source\mozilla-2.0\modules\plugin 目錄解壓縮出來,裏面有我們開發NPAPI插件所需的所有資源。

爲了方便大家使用,這裏提供plugin.zip的下載。

本例將plugin目標解壓到D:\code\下(後面統一使用絕對路徑,以避免異意)

2. 創建Plugin

本着“有圖有真相”的原則,下面將連續多圖並配文字一步步創建、調試Plugin。圖中畫紅圈的代表需要填寫或者需要選擇的地方。

創建項目

新建項目 alt text

 

Name項一定要以np開頭,爲了將來適應不同操作系統,最好全小寫,不要太長,儘量控制在8字符內。
本例定義爲npdemo
Location項定義到plugin\sdk\samples以便項目屬性中用相對路徑引用NPAPI的SDK
本例定義爲d:\code\plugin\sdk\samples
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爲

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

 

下面添加最關鍵的部分:Plugin實現類
alt text
alt text

 

類名可以隨便起,本例命名爲CPlugin
但是一定要繼承自nsPluginInstanceBace
alt text

 

修改Plugin.h

#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個全局函數

#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”和“........\base\public
alt text

 

添加預編譯宏 X86
alt text

編譯調試

現在可以編譯了!
本例編譯後,在D:\code\plugin\sdk\samples\npdemo\Debug生成npdemo.dll

打開註冊表,在HKEYLOCALMACHINE\SOFTWARE\MozillaPlugins下新建子項@mozilla.com.cn/demo
並新建字符串數據“Path”設值爲D:\code\plugin\sdk\samples\npdemo\Debug\npdemo.dll

alt text

 

打開火狐瀏覽器 在地址欄輸入“about:plugins” 如果在plugin列表中有本例的npdemo.dll及說明我們的plugin示例已經成功完成
alt text

簡單的測試頁面: 

<HTML>
    <HEAD>
    </HEAD>
    <BODY>
        <embed type="application/demo-plugin">
    </BODY>
</HTML>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章