0

可能这与在 Firefox 扩展中使用由 Firebreath 生成的插件有关?; 但是,我的问题可能更具体,所以这里......

我正在使用 Linux (Ubuntu 11.04),并且使用 FireBreath 构建了一个 Mozilla/Firefox (Firefox 7) 插件。这个平台上生成的插件是一个“ npXXX.so”文件,我在~/.mozilla/plugins. 然后,我编写了一个使用该插件的扩展程序——除了符号链接,似乎不需要其他任何东西——一切似乎都可以正常工作:)

所以,知道“ firefox 支持通过 XPI 安装你的插件。FireBreath 团队不建议这样做”,现在我仍然想将扩展和插件打包成一个 XPI 文件。所以,我正在阅读一些关于可安装包的结构 - 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

现在,它说:“不应该使用旧的基于 XPCOM 和 LiveConnect 的插件 API。 ”,所以我猜/components应该使用“ ”目录(即使它在上面的页面中作为示例给出)。而且我在任何地方都找不到明确的说明,但我猜 FireBreath 构建了 NPAPI 插件 - 所以大概“ ”是要走的路。(也提到了“ ”,但它清楚地表明它已被 Firefox > 3.6 弃用)。/plugins/platform

 

好的,到目前为止一切顺利......所以我尝试将插件文件复制到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/; 但是,我想饶恕那个用户:)

 

我将如何处理这种包装 - 有推荐的方法吗?

非常感谢您的任何答案,
干杯!

 

编辑:发现将插件作为工具包捆绑发布 - MDN仅声明install.rdf,并且plugins/obj.so需要 a;然后我发现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 插件也是如此(例如,只是一个 install.rdf 和插件/plugins),只显示扩展 - 没有插件(也没有合理的错误消息)。这可能是 FireBreath 的问题吗?

4

1 回答 1

1

好吧,我会将此作为答案发布 - 我刚刚确认 FireBreath 插件确实可以作为 .xpi 扩展名以简单的“工具包捆绑”方式打包。

基本上,我刚刚清理了我的开发 PC 的 Firefox 配置文件,并尝试在那里安装带有插件的 .xpi - 在开发 PC 上,插件显示在 about:plugins 中并且运行良好(即使它只是在配置文件中解压缩/ extensions/EXT/plugins/obj.so,而不是 ~/.mozilla/plugins)...事实上,我将扩展和插件打包在单独的 .xpi 中,然后按照建议合并为一个多项目包 - 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 唯一吐出的东西是这样的:

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)]

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

于 2011-10-29T23:00:41.250 回答