1

MDN上,引入了短语“Add-on Manager-enabled XUL application”。

通过将包含插件的 XPI 文件拖放到 FireFox 窗口中,插件的小部件将安装在 FireFox 的插件栏中。

我还可以通过指定命令行选项“-app application.ini”来使用 Firefox 运行 XUL 应用程序。

由于 MDN 让我认为这两者并不相互排斥,我正在寻找一个简单的 4 步流程,其中第 1 步和第 2 步分别创建 XUL 应用程序和 XPI,第 3 步描述如何更改 XUL 应用程序或 XPI为第4步做准备,第4步是最后的整合。

我将从第 1 步和第 2 步开始,然后建议在第 3 步或第 4 步中需要完成的一些事情。

第 1 步:按照https://addons.mozilla.org/en-US/developers/docs/sdk/1.3/dev-guide/addon-development/implementing-simple-addon.html上的教程构建 XPI

第 2 步:按照https://developer.mozilla.org/en/Getting_started_with_XULRunner上的教程构建 XUL 应用程序

现在是第 3 步和第 4 步。它们应该包括通过添加代码来修改在第 2 步中构建的 application.ini:

[XRE]
EnableExtensionManager=1

它们还应该包括向prefs.js添加行以支持扩展管理器。他们可能需要通过添加类似于以下内容的代码将插件栏窗口元素添加到 XUL :

<toolbarpalette id="BrowserToolbarPalette">
<toolbarbutton 
    id="xfox-statusbarpanel" class="toolbarbutton-1 chromeclass-toolbar-additional"
    label="&name;"
    tooltiptext="&name;"
    oncommand="toggleSidebar('xfox-sidebar');"
    context="xfox-contextmenu">
</toolbarbutton>
</toolbarpalette>

我已成功使“启用附加管理器的 XUL 应用程序”(又名<TestApp>)接受 XPI(又名<wikipanel>)并尝试安装它,但它失败并显示错误消息:“ <wikipanel> 无法安装,因为它与<TestApp version 1.0>不兼容

[编辑] 我编辑了 INSTALL.RDF(对于我的 XPI)并添加了以下内容:

<em:targetApplication>
   <Description>
     <em:id>testapp@sample.xul</em:id>
     <em:minVers‌​ion>0.0</em:minVersion>
     <em:maxVersion>9.*</em:maxVersion>
   </Description>
 </em:targe‌​tApplication>.

扩展现在安装,但我在 jsconsole 中收到以下错误:

错误:小部件模块当前仅支持 Firefox。将来它将支持其他应用程序。请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=560716了解更多信息。

4

2 回答 2

1

你在这里把事情搞混了。-app命令行标志用于运行 XULRunner应用程序,而不是浏览器扩展。至于 Add-on SDK,它没有 XUL 支持,只有 HTML。有一个支持 XUL的附加 SDK 的分支,但它看起来有些过时,我不确定它是否能够创建独立的窗口(这就是您要问的问题吗?)。

当然也有经典的扩展​​。它们允许您做任何事情,包括创建新的 XUL 窗口或使用附加栏。但是它们的编写要复杂得多。

于 2011-12-04T12:47:00.963 回答
1

我找到了答案,但它有点像 hack,需要从 addon-kit javascript 源代码中删除以下代码行:

if (!require("api-utils/xul-app").is("Firefox")) {
    throw new Error([
      "The widget module currently supports only Firefox.  In the future ",
      "it will support other applications. Please see ",
      "https://bugzilla.mozilla.org/show_bug.cgi?id=560716 for more information."
    ].join(""));
}

由于上述代码是专门为防止在真正的 Firefox 以外的任何地方使用插件工具包而设计的,因此这条途径不值得进一步追求。但是,如果有办法以符合 Firefox 的方式构建 xul-app,那么我将重新讨论这个问题。

Firefox 毕竟是 chrome://browser/content/browser.xul。

于 2011-12-06T20:24:23.337 回答