在我的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插件的新手,
那么如何在点击工具栏按钮时显示一个面板?
答案 0 :(得分:3)
在叠加层中,嵌套元素的第一级必须引用DOM中已有的内容(元素内容将被添加到其中),否则这些元素将被忽略。 (该规则的一些例外情况,例如<script>
。)
您的小组定义基本上说(与您想要的内容相反)
panel
hbox
及其子项添加到面板您需要更改XUL以为面板提供容器,例如#mainPopupSet
,就像您使用#BrowserToolbarPalette
toolbarbutton
时所做的那样。
<overlay ...>
...
<popupset id="mainPopupSet">
<panel id="thepanel">
...
</panel>
</popupset>
</overlay>