2011-10-29 115 views
0

可能這與Using a plugin generated with Firebreath in a Firefox Extension?有關;然而,我的問題可能更具體,所以這裏...將Mozilla(FireBreath)插件打包成FireFox的.xpi文件?

我正在使用Linux(Ubuntu 11.04),並且我已經使用FireBreath構建了Mozilla/Firefox(Firefox 7)插件。在這個平臺上生成的插件是一個「npXXX.so」文件,我在~/.mozilla/plugins中獲得了符號鏈接。然後,我編寫了一個使用這個插件的擴展 - 除了符號鏈接,似乎沒有其他要求 - 所有似乎工作只是粉碎:)

因此,知道「firefox supports installing your plugin via XPI. This is not recommended by the FireBreath team」,現在我仍然想將擴展和插件打包到XPI文件中。所以,我閱讀Structure of an installable bundle - MDN了一下,我可以看到這兩種可能性:

/components/* XPCOM components (*.js, *.dll), and interface files from *.xpt (>=1.7) 
... 
/plugins/* NPAPI Plugins (>=1.8) 
... 
binary-component components/linux/mycomponent.so ABI=Linux_x86-gcc3 

現在,它說:「The older XPCOM- and LiveConnect-based APIs for plugins should not be used.」,所以我猜「/components」目錄應該不能使用(即使它在上面的頁面中作爲例子給出)。而且我無法在任何地方明確地發現這一點,但我猜FireBreath建立了NPAPI插件 - 所以推測「/plugins」就是要走的路。 (還提到了「/platform」,但它清楚地表明它已被棄用於Firefox> 3.6)。

 

好了,到目前爲止好......所以我儘量把插件文件拷貝到plugins/linux擴展目錄內:

cp -L ~/.mozilla/plugins/npXXX.so plugins/linux/ 

...然後插入chrome.manifest以下:

binary-component plugins/linux/npXXX.so ABI=Linux_x86-gcc4 

...然後我將整個擴展目錄(包含插件)壓縮爲.xpi,嘗試將它安裝在不同的com上帕特。在那裏,.xpi成功安裝,.so文件確實在配置文件的extensions/XXX/plugins/linux/目錄下解壓 - 擴展的每個跨平臺(javascript)代碼都可以正常工作;除了無法找到該插件。

當然,用戶當然可以將擴展名.so符號鏈接到~/.mozilla/plugins/;不過,我想不遺餘力的用戶:)

 

我怎麼會去這類包裝東西 - 有沒有做一個推薦的方式?

非常感謝任何答案,
乾杯!

 

編輯:發現Shipping a plugin as a Toolkit bundle - MDN其要求僅install.rdf,並且需要plugins/obj.so;然後我發現Running Quake Live in Firefox 4, 5 and 6 on Linux [fixes inside],指的是QuakeLivePlugin_433-modded_ff10.xpi,並且確實遵循這樣一個簡單的結構。如果我安裝了這個,我同時得到一個Quake擴展和一個Quake插件(即使錯誤控制檯抱怨「無法讀取鉻清單文件'/path/to/extensions/[email protected]/chrome.manifest'。「)....但如果我嘗試與我的FireBreath插件(例如只是一個install.rdf和插件/plugins),只有擴展名顯示 - 沒有插件(並沒有合理的錯誤消息)..這可能是FireBreath的問題?

+1

作爲供參考,http://www.firebreath.org/display/documentation/About+FireBreath頁面特別說明它支持「NPAPI瀏覽器」 - 意味着它支持支持NPAPI插件的瀏覽器。我沒有意識到,沒有明確聲明firebreath插件在適當的系統上構建爲NPAPI插件,並且會試圖在文檔中澄清。 – taxilian

+0

非常感謝info @Taxilian - 我必須承認,在XPCOM和NPAPI之類的術語之間進行導航並不是微不足道的,因此,對於像我這樣的人來說,在文檔中的任何澄清都是很棒的: )乾杯! – sdaau

回答

1

嗯,我會發布這個答案 - 我剛剛確認FireBreath插件實際上是以簡單的「工具包捆綁」方式打包爲.xpi擴展名。

基本上,我剛剛清理了我的開發PC的Firefox配置文件,並嘗試安裝帶有插件的.xpi文件 - 在開發PC上,該插件顯示了about:plugins並運行得很好(即使它只是解壓縮在profile/extensions/EXT/plugins/obj.so中,而不是在〜/ .mozilla/plugins中)...實際上,我將擴展和插件打包在單獨的.xpi文件中,然後合併成一個一個在Multiple Item Package - MDN中推薦 - 並且工作得很好(在加載合併的xpi時,會得到有關安裝兩個擴展的提示 - 一個用於插入一個,另一個用於「普通」擴展)...

所以問題出在另一臺測試計算機上只是 - 問題似乎是我在插件中使用Gnome庫,而我的開發PC是Ubuntu 11.04--我認爲這個測試PC是Ubuntu 10.04 ...所以,很可能,問題在於Gnome庫不兼容在插件構建;不幸的是,我沒有得到很多的錯誤從Firefox回來,就算我做的:

NSPR_LOG_MODULES=IPCPlugins:5 NSPR_LOG_FILE=/tmp/plugins.log /path/to/firefox -P myprofile 

(...在Logging Multi-Process Plugins - MDN推薦 - 然而,/tmp/plugins.log保持爲空)。 Firefox的問題機器上吐出的唯一的事情是這樣的到stdout:

WARNING: Application calling GLX 1.3 function "glXCreatePixmap" when GLX 1.3 is not supported! This is an application bug! 
WARNING: Application calling GLX 1.3 function "glXDestroyPixmap" when GLX 1.3 is not supported! This is an application bug! 
(firefox:6548): GLib-GObject-WARNING **: /build/buildd/glib2.0-2.24.1/gobject/gsignal.c:1149: unable to lookup signal "text-insert" for non instantiatable type `AtkText' 

...我不能告訴,如果這事做與插件或不...但我想至少包裝部分被確認爲現在工作:)乾杯!

 

編輯:一段時間後,測試PC 上的Firefox也吐出以下(雖然我本來期望此消息立即彈出):

LoadPlugin: failed to initialize shared library /path/to/profile/extensions/extXXX/plugins/npXXX.so [/usr/lib/libstdc++.so.6: version ``GLIBCXX_3.4.14' not found (required by /path/to/profile/extensions/extXXX/plugins/npXXX.so)]

......這終於證實它是一個構建問題,我有過。

相關問題