可能這與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的問題?
作爲供參考,http://www.firebreath.org/display/documentation/About+FireBreath頁面特別說明它支持「NPAPI瀏覽器」 - 意味着它支持支持NPAPI插件的瀏覽器。我沒有意識到,沒有明確聲明firebreath插件在適當的系統上構建爲NPAPI插件,並且會試圖在文檔中澄清。 – taxilian
非常感謝info @Taxilian - 我必須承認,在XPCOM和NPAPI之類的術語之間進行導航並不是微不足道的,因此,對於像我這樣的人來說,在文檔中的任何澄清都是很棒的: )乾杯! – sdaau