NPAPI開發詳解,Windows版

http://mozilla.com.cn/post/21666/

本文通過多圖組合,詳細引導初學者開發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。圖中畫紅圈的代表需要填寫或者需要選擇的地方。

創建項目

新建項目  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爲

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

 

添加預編譯宏 X86
  alt text

現在可以編譯了!


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

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


發佈了7 篇原創文章 · 獲贊 6 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章