XUL:如何在statusbarpanel中创建嵌套的menupopup(使用statusbarpanel-menu-iconic)

时间:2010-08-13 05:51:20

标签: xul

在XUL中,您可以使用<statusbarpanel>标记创建状态栏面板图标,类似于Firebug和Greasemonkey使用的图标。如果你设置了正确的类,你可以在里面抛出一个<menupop>,然后在用户点击图标时弹出一个菜单,就像这样......

<statusbarpanel class="statusbarpanel-menu-iconic"
        src="chrome://YourExtension/content/icon.png">
    <menupopup>
        <menuitem label="whatever" oncommand="doSomething();">
        <menuitem label="whatever else" oncommand="doSomethingElse();">
    </menupopup>
</statusbarpanel>

现在,使用其他弹出菜单,您可以使用菜单标记嵌套一系列菜单:

<statusbarpanel class="statusbarpanel-menu-iconic"
        src="chrome://YourExtension/content/icon.png">
    <menu value="Old">
        <menupopup>
            <menuitem label="whatever" oncommand="doSomething();">
            <menuitem label="whatever else" oncommand="doSomethingElse();">
        </menupopup>
    </menu>
    <menu value="New>
        <menupopup>
            <menuitem label="yet another" oncommand="doYetAnotherSomething();">
        </menupopup>
    </menu>
</statusbarpanel>

但上面的代码实际上并不起作用,因为<statusbarpanel>不会允许<menu>子项(好吧,它会允许它,但不能创建所需的效果)。

所以,我想知道的是......有什么方法可以制作一个带有多层菜单项的状态栏面板图标触发菜单?

*编辑* 既然我不能在答案的评论中发布这个(并获得语法着色等),这里最终对我有用(感谢Sathish!):

<statusbarpanel class="statusbarpanel-menu-iconic"
        src="chrome://YourExtension/content/icon.png" popup="stausBarPanelMenu">
</statusbarpanel>
<popup id="statusBarPanelMenu" position="start_before">
    <menu value="Old">
        <menupopup>
            <menuitem label="whatever" oncommand="doSomething();">
            <menuitem label="whatever else" oncommand="doSomethingElse();">
        </menupopup>
    </menu>
    <menu value="New>
        <menupopup>
            <menuitem label="yet another" oncommand="doYetAnotherSomething();">
        </menupopup>
    </menu>
</popop>

哦,作为对任何可能读到这个的XUL开发者的旁注:你应该真正消除“弹出状态栏内的menupopup”风格。回答这个问题的风格同样易于学习/使用,功能更强大,并且它依赖于可与其他XUL元素一起使用的相同弹出机制。整个“menupopup在一个状态栏内”这只是一个令人困惑,不需要的异常。

1 个答案:

答案 0 :(得分:0)

试试这个:

  1. 创建一个这样的弹出元素: <popup ... > <menu ... > <menupopup ... > <menuitem ... > </menupopup ... > </menu> </popup>

  2. id popup元素分配给oncontextmenu属性,或使用onclick元素的statusbarpanel事件动态显示该元素。