将Mozilla(FireBreath)插件插入.xpi for FireFox?

时间:2011-10-29 20:10:47

标签: linux plugins firefox-addon firebreath

这可能与Using a plugin generated with Firebreath in a Firefox Extension?有关;但是,我的问题可能更具体,所以这里......

我正在使用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,尝试将其安装在另一台计算机上。在那里,.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插件(即使是错误控制台抱怨“无法读取chrome清单文件'/ path/to/extensions/quakeliveplugin@idsoftware.com/chrome.manifest'。”)....但如果我尝试与我的相同FireBreath插件(例如只是/plugins中的install.rdf和插件),只显示扩展名 - 没有插件(并且没有合理的错误消息)..这可能是FireBreath的问题吗?

1 个答案:

答案 0 :(得分:1)

好吧,我会发布这个答案 - 我刚刚确认FireBreath插件实际上是以简单的“工具包”方式打包,作为.xpi扩展。

基本上,我刚刚清理了我的开发PC的Firefox配置文件,并试图在那里安装带有插件的.xpi - 在开发PC上,插件显示在:插件并运行得很好(即使它刚刚解压缩)在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 / plugin.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)]

...最终证实这是我遇到的构建问题。