在firefox中创建面板

时间:2013-08-12 01:26:26

标签: firefox firefox-addon panel xul

在我的xul文件中:

<!DOCTYPE overlay >
<overlay id="custombutton-overlay"
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

<script src="browserOverlay.js"/>

<!-- Firefox -->
<toolbarpalette id="BrowserToolbarPalette">
  <toolbarbutton id="custom-button-1"/>
</toolbarpalette>


<!-- button details -->
<toolbarbutton id="custom-button-1"
  label="Custom"
  tooltiptext="My custom toolbar button"
  oncommand="xyz.showPanel()"
  class="toolbarbutton-1 chromeclass-toolbar-additional custombutton"
/>

<panel id="thepanel">
  <hbox align="start">
    <image src="warning.png"/>
    <vbox>
      <description value="You have 6 new messages."/>
      <hbox>
        <button label="Read Mail"/>
        <button label="New Message"/>
      </hbox>
    </vbox>
  </hbox>
</panel>

</overlay>

调用函数“xyz.showPanel()”时,其代码如下:

var xyz = {
    showPanel: function (e)
    {
        var button = document.getElementById('custom-button-1');
        var panel = document.getElementById('thepanel');
        panel.openPopup(button, 'after_start', 0, 0, false, false);

    }
}

它在错误控制台中显示错误:

  

错误:TypeError:panel为null

我想在Firefox中显示类似“下载”工具栏按钮的面板

我是Firefox插件的新手,

那么如何在点击工具栏按钮时显示一个面板?

1 个答案:

答案 0 :(得分:3)

在叠加层中,嵌套元素的第一级必须引用DOM中已有的内容(元素内容将被添加到其中),否则这些元素将被忽略。 (该规则的一些例外情况,例如<script>。)

您的小组定义基本上说(与您想要的内容相反)

  • 找到ID为“thepanel”的现有 panel
  • 如果找到,请将hbox及其子项添加到面板
  • 如果没有,请忽略子树。

您需要更改XUL以为面板提供容器,例如#mainPopupSet,就像您使用#BrowserToolbarPalette toolbarbutton时所做的那样。

<overlay ...>
...
<popupset id="mainPopupSet">
  <panel id="thepanel">
    ...
  </panel>
</popupset>
</overlay>