前幾天一直在忙乎著研究和閱讀XUL和FF的Extension相關資料,今天突然發現,我
要做得事情似乎不是用Extension來實現的。因為原來的應用是一個ActiveX,網頁會將一些參數通過ActiveX控制項傳遞進來,而
ActiveX接到這些參數以後,會和伺服器進行一些資料互動,最後調起本地的執行程式。似乎我走了一些彎路,方向不對。我要做得事情應該是編寫一個
Plugin,而非Extension。
及時修正了下一步的研究計劃,那麼就讓我們先來編譯和測試Mozilla提供的一個小例子吧。原文串連在這裡:
https://developer.mozilla.org/En/Compiling_The_npruntime_Sample_Plugin_in_Visual_Studio
。
文章中是以VS2003舉例,我這裡以VC6來進行測試,並且將步驟中需要注意的地方特別說明了一下。
1、先到這裡下載相關源碼:http://mxr.mozilla.org/seamonkey/source/modules/plugin/samples/npruntime/
。
不知道為什麼Mozilla只提供了頁面形式,沒有打個包,害得我得一個個檔案下載和儲存,鬱悶。
2、在VC6中建立一個Win32 Dynamic-Link
Library工程,取名“nprt”。注意:建議工程以小寫np開頭,並且長度不超過8個字元,這樣以後就會省事很多。
3、下一步,選擇“An empty DLL project”,然後“Finish”。
4、將剛才下載的源碼添加到工程中來。test.html不用添加,nprt.def建議也添加進來。
5、現在還不能編譯,否則會出很多錯誤。開啟Project
Settings,轉到C/C++標籤頁,在Category中選擇Preprocessor,在Preprocessor
Definitions中最後面添加:,XP_WIN32,MOZILLA_STRICT_API,XPCOM_GLUE,XP_WIN,_X86_。
註:如果你使用VS 2005,需要添加全部的定
義:WIN32;_WINDOWS;NPRT_EXPORTS;XP_WIN32;MOZILLA_STRICT_API;XPCOM_GLUE;XP_WIN;_X86_
6、在Additional include directories下面添加XULRunner
SDK的include路徑,可以是絕對路徑,也可以是相對路徑,看你當初怎麼解壓的了。例如:../../xulrunner-sdk/include
7、在Category中選擇Precompiled Headers,選擇Not using precompiled
headers,OK,關閉Project Settings對話方塊。開啟npp_gate.cpp,將下面的代碼注釋掉:
jref NPP_GetJavaClass (void)
{
return NULL;
}
8、編譯!……我靠,有錯:Fatal error C1083: Cannot open include file: 'npapi.h':
No such file or directory。我可是嚴格按照教程上面寫的去做得啊。
9、在xulrunner-sdk目錄下搜尋了一下npapi.h,原來在xulrunner-sdk/sdk/include下面,這好辦,多加
一條包含路徑不就歐了?仿照第6步,添加該目錄;
10、編譯!OK,過了。
11、到輸出目錄下將nprt.dll複製到FF安裝目錄的plugins目錄下,例如:C:/Program Files/Mozilla
Firefox/plugins/
12、如果此時FF開著也沒關係,不用關(這點很不錯)。在地址欄鍵入about:plugins,看看是不是有一個npruntime
scriptable example plugin,如果有,那就表示歐了,FF認出了我們的外掛程式;
13、在FF中開啟test.html,嗯?怎麼還提示安裝缺失外掛程式?用EditPlus開啟test.html,噢,原來有這麼一
句:<embed
type="application/x-java-mozilla-npruntime-scriptable-plugin"
style="display: block; width: 50%; height:
100px;">。因為我們剛才沒有添加名字為x-java-mozilla-npruntime-scriptable-plugin的外掛程式,所
以當然認不出來啦。
14、隨便點一下頁面上的按鈕,看看簡單的互動行為。
OK,第一個例子還算順利,比想象中的要順利。下面就該研究一下代碼了,看看FF的外掛程式和ActiveX的區別到底有多大。
附一些參考資料:
http://xinsync.xju.edu.cn/index.php/archives/2124
http://mqjing.blogspot.com/2008/09/plugin-firefox-plugin.html