前幾天一直在忙乎著研究和閱讀XUL和FF的Extension相關(guān)資料,今天突然發(fā)現(xiàn),我要做得事情似乎不是用Extension來(lái)實(shí)現(xiàn)的。因?yàn)樵瓉?lái)的應(yīng)用是一個(gè)ActiveX,網(wǎng)頁(yè)會(huì)將一些參數(shù)通過(guò)ActiveX控件傳遞進(jìn)來(lái),而ActiveX接到這些參數(shù)以后,會(huì)和服務(wù)器進(jìn)行一些數(shù)據(jù)交互,最后調(diào)起本地的執(zhí)行程序。似乎我走了一些彎路,方向不對(duì)。我要做得事情應(yīng)該是編寫一個(gè)Plugin,而非Extension。
及時(shí)修正了下一步的研究計(jì)劃,那么就讓我們先來(lái)編譯和測(cè)試Mozilla提供的一個(gè)小例子吧。原文連接在這里:
https://developer.mozilla.org/En/Compiling_The_npruntime_Sample_Plugin_in_Visual_Studio。文章中是以VS2003舉例,我這里以VC6來(lái)進(jìn)行測(cè)試,并且將步驟中需要注意的地方特別說(shuō)明了一下。
1、先到這里下載相關(guān)源碼:http://mxr.mozilla.org/seamonkey/source/modules/plugin/samples/npruntime/。不知道為什么Mozilla只提供了頁(yè)面形式,沒有打個(gè)包,害得我得一個(gè)個(gè)文件下載和保存,郁悶。
2、在VC6中新建一個(gè)Win32 Dynamic-Link Library工程,取名“nprt”。注意:建議工程以小寫np開頭,并且長(zhǎng)度不超過(guò)8個(gè)字符,這樣以后就會(huì)省事很多。
3、下一步,選擇“An empty DLL project”,然后“Finish”。
4、將剛才下載的源碼添加到工程中來(lái)。test.html不用添加,nprt.def建議也添加進(jìn)來(lái)。
5、現(xiàn)在還不能編譯,否則會(huì)出很多錯(cuò)誤。打開Project Settings,轉(zhuǎn)到C/C++標(biāo)簽頁(yè),在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路徑,可以是絕對(duì)路徑,也可以是相對(duì)路徑,看你當(dāng)初怎么解壓的了。例如:..\..\xulrunner-sdk\include
7、在Category中選擇Precompiled Headers,選擇Not using precompiled headers,OK,關(guān)閉Project Settings對(duì)話框。打開npp_gate.cpp,將下面的代碼注釋掉:
jref NPP_GetJavaClass (void)
{
return NULL;
}
8、編譯!……我靠,有錯(cuò):Fatal error C1083: Cannot open include file: 'npapi.h': No such file or directory。我可是嚴(yán)格按照教程上面寫的去做得啊。
9、在xulrunner-sdk目錄下搜索了一下npapi.h,原來(lái)在xulrunner-sdk\sdk\include下面,這好辦,多加一條包含路徑不就歐了?仿照第6步,添加該目錄;
10、編譯!OK,過(guò)了。
11、到輸出目錄下將nprt.dll復(fù)制到FF安裝目錄的plugins目錄下,例如:C:\Program Files\Mozilla Firefox\plugins\
12、如果此時(shí)FF開著也沒關(guān)系,不用關(guān)(這點(diǎn)很不錯(cuò))。在地址欄鍵入about:plugins,看看是不是有一個(gè)npruntime scriptable example plugin,如果有,那就表示歐了,F(xiàn)F認(rèn)出了我們的插件;
13、在FF中打開test.html,嗯?怎么還提示安裝缺失插件?用EditPlus打開test.html,噢,原來(lái)有這么一句:<embed type="application/x-java-mozilla-npruntime-scriptable-plugin" style="display: block; width: 50%; height: 100px;">。因?yàn)槲覀儎偛艣]有添加名字為x-java-mozilla-npruntime-scriptable-plugin的插件,所以當(dāng)然認(rèn)不出來(lái)啦。
14、隨便點(diǎn)一下頁(yè)面上的按鈕,看看簡(jiǎn)單的交互行為。
OK,第一個(gè)例子還算順利,比想象中的要順利。下面就該研究一下代碼了,看看FF的插件和ActiveX的區(qū)別到底有多大。
附一些參考資料:
http://xinsync.xju.edu.cn/index.php/archives/2124
http://mqjing.blogspot.com/2008/09/plugin-firefox-plugin.html