FireFox Plugin編程

9

jiaofeng601, +479html

9人支持,來自 Meteor豬爪hanyuxinting更多web

 

本文經過多圖組合,詳細引導初學者開發NPAPI的瀏覽器插件。瀏覽器

如需測試開發完成的插件請參考http://mozilla.com.cn/kb/dev/A.88/bash

1. 準備工做app

開發工具函數

本例使用的是visual studio 2008 英文版,下圖是關於信息關於信息工具

Windows SDKoop

本例使用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

如今能夠編譯了!

 

三、註冊、測試

本例編譯後,在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

9

jiaofeng601, +479

9人支持,來自 Meteor豬爪hanyuxinting更多

 

本文經過多圖組合,詳細引導初學者開發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

如今能夠編譯了!

 

三、註冊、測試

本例編譯後,在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

9

jiaofeng601, +479

9人支持,來自 Meteor豬爪hanyuxinting更多

 

本文經過多圖組合,詳細引導初學者開發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

如今能夠編譯了!

 

三、註冊、測試

本例編譯後,在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

相關文章
相關標籤/搜索