資源描述:
《Firefox插件》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、Firefox插件(plugins)開(kāi)發(fā)實(shí)用指南Postedon一22013bywindknife了解Firefox插件的開(kāi)發(fā)知識(shí)的時(shí)候,找到了這篇文章。的確讓我少走了彎路,比如,我的NP插件的DLL,之前不是NP開(kāi)頭的,在此非常感謝原作者,您文章讓我節(jié)約了不少時(shí)間。轉(zhuǎn)載傳播此文章,希望對(duì)準(zhǔn)備研究和學(xué)習(xí)Firefox插件開(kāi)發(fā)的朋友有所幫助。Firefox插件可實(shí)現(xiàn)強(qiáng)大功能,但其中麻煩事情不少。寫(xiě)這個(gè)實(shí)用指南首先是為了方便自己記憶,免得以后再次栽倒一些坑里面,如果能幫助其他人,則是更好。這個(gè)指南不是為了手把手教讀者開(kāi)發(fā)插件,而是作為一個(gè)FAQ,解決各種詭異問(wèn)題。Firefox擁有眾多的擴(kuò)展
2、(Extension),開(kāi)發(fā)擴(kuò)展也非常容易,不過(guò)有一些事情還是無(wú)法用擴(kuò)展解決,需要訪問(wèn)操作系統(tǒng)的底層功能,這就需要寫(xiě)插件(plugins)。例如flash就是一個(gè)插件而不是擴(kuò)展。Mozilla提供了一系列的教程和文檔,雖然很不詳盡,眾多重要的API語(yǔ)焉不詳,但至少是一個(gè)好的開(kāi)始。最需要閱讀的是pluginsAPI和使用入門。這是一個(gè)相當(dāng)長(zhǎng)的文檔,如果看完所有的內(nèi)容會(huì)花費(fèi)大量的時(shí)間而且還會(huì)很暈,這里列一些重點(diǎn)供參考。plugins基礎(chǔ)概念寫(xiě)第一個(gè)插件(只需要關(guān)注WritingPlug-ins這一節(jié)所談到的內(nèi)容)獲得一份firefox的源碼,比如firefox3.6。plugins的例子可以
3、在源碼里找到(modules/plugin/sdk/samples),如果出了問(wèn)題還可以自己編譯一個(gè)debug版的firefox來(lái)調(diào)試。了解瀏覽器能提供什么功能制作插件的安裝程序,推薦用擴(kuò)展的方式安裝插件,有無(wú)數(shù)的好處完成以上這些內(nèi)容以后差不多就已經(jīng)可以實(shí)現(xiàn)自己的插件了,一般而言,參照著例子來(lái)做開(kāi)發(fā)不會(huì)有什么問(wèn)題,只是有不少細(xì)節(jié)需要留意。Firefoxplugins開(kāi)發(fā)的眾多奇怪的約定(假設(shè)plugins已經(jīng)被正確安裝)有些約定非常奇怪,不要問(wèn)我為什么,天曉得開(kāi)發(fā)firefox的牛人們?cè)趺聪氲摹T赪indows下,plugins必須滿足以下條件才能被firefox檢測(cè)到:插件的名字必須是
4、np*.dll,也就是必須以np開(kāi)頭,.dll結(jié)尾插件dll資源的語(yǔ)言必須為L(zhǎng)ANG_ENGLISH,codepage必須為1252。在rc文件里是這么寫(xiě)的:LANGUAGELANG_ENGLISH,SUBLANG_ENGLISH_US#pragmacode_page(1252)插件dll的VERSION_INFO里面必須包含以下值:VALUE"MIMEType","application/x-your-mimetype"這個(gè)MIME就是
5、b開(kāi)頭,plugin.so結(jié)尾插件必須實(shí)現(xiàn)NP_GetMIMEDescription和NP_GetPluginVersion,并返回合適MIME字符串。注意,這個(gè)字符串并不是普通的MIME,是有特殊規(guī)則的,詳見(jiàn)前面這個(gè)鏈接的內(nèi)容。插件so不要靜態(tài)鏈接gtk、opensll、pthread、z等系統(tǒng)庫(kù),這會(huì)在不同linux平臺(tái)上因?yàn)榉?hào)表的問(wèn)題遇到各種運(yùn)行時(shí)錯(cuò)誤特別需要說(shuō)明的是,NP_GetPluginVersion、NP_GetEntryPoints等關(guān)鍵函數(shù)沒(méi)有任何官方文檔介紹它們,只能根據(jù)例子來(lái)猜,反正沒(méi)事就別改它們的實(shí)現(xiàn),copy例子中的代碼就好。firefox插件開(kāi)發(fā)注意事項(xiàng)寫(xiě)f
6、irefox插件的一個(gè)基本習(xí)慣是,經(jīng)常編譯代碼并運(yùn)行它,保證你的插件還能工作。只要firefox無(wú)法加載dll/so,或者加載出現(xiàn)任何錯(cuò)誤,都會(huì)悄無(wú)聲息的忽略這個(gè)插件。時(shí)常關(guān)注一下about:plugins,看看插件是不是還在這個(gè)列表里。firefox插件從窗口模式上可分為windowless和windowed兩種。其中,windowless模式的文檔較多較全,是firefox比較推薦的模式,坑比較少,這里就不多說(shuō)了。windowed模式則相反,需要好好說(shuō)說(shuō)。無(wú)論在Windows還是Linux上,windowed的插件都擁有獨(dú)立于瀏覽器頁(yè)面的窗口。firefox會(huì)通過(guò)插件的NPP_Set
7、Window來(lái)告訴插件當(dāng)前窗口的情況。關(guān)于windowed插件有兩個(gè)詭異問(wèn)題需要注意:Windows平臺(tái)下,插件窗口默認(rèn)會(huì)響應(yīng)WM_CTLCOLOREDIT、WM_CTLCOLORLISTBOX、WM_CTLCOLORBTN、WM_CTLCOLORSTATIC消息,并設(shè)置一個(gè)默認(rèn)的背景色。這本來(lái)沒(méi)問(wèn)題,但在WindowsXP下,這個(gè)顏色居然永遠(yuǎn)是黑色,而不是默認(rèn)系統(tǒng)背景色(通常是白色)。最好subclass這個(gè)窗口并且攔截這些消息,