2011-10-29 163 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)]

......这终于证实它是一个构建问题,我有过。

相关问题