将附加栏添加到自定义XULRunner应用程序

时间:2011-11-30 23:17:47

标签: firefox-addon xul firefox-addon-sdk xpi

MDN上,引入了“加载项管理器启用的XUL应用程序”这一短语。

通过拖动包含附加组件的XPI文件并将其放到FireFox窗口上,插件的小部件将安装在FireFox的附加栏中。

我也可以使用Firefox通过指定命令行选项“-app application.ini”来运行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添加行以支持扩展管理器。他们可能需要adding addon bar window element to 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&gt;)接受了XPI(又名<wikipanel&gt;)并尝试安装它,但是它失败并显示错误消息:“<wikipanel&gt;无法安装,因为它与<TestApp version 1.0&gt;”

不兼容

[edit]我编辑了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

2 个答案:

答案 0 :(得分:1)

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

当然有classic extensions。它们允许您执行任何操作,包括创建新的XUL窗口或使用附加栏。但是写作起来要复杂得多。

答案 1 :(得分:1)

我找到了答案,但它有点像黑客,需要从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。