可能这与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