2

我正在使用 XUL 开发一个 Firefox 插件,我得到了以下内容:

<toolbarpalette id="BrowserToolbarPalette">
    <toolbarbutton id="MYBUTTON_ID" type="menu-button" class="toolbarbutton-1" label="Menu" tooltiptext="Menu" oncommand="checkLogin();" popup="login-popup">
        <menupopup id="mymenu">
            <menuitem label="Menu 1" oncommand="toDo(); event.stopPropagation();"/>
            <menuitem label="Menu 2" oncommand="toDo(); event.stopPropagation();"/>
            <menuitem label="Menu 3" oncommand="toDo(); event.stopPropagation();"/>
        </menupopup>
    </toolbarbutton>
</toolbarpalette>
<popupset>
    <panel id="login-popup" backdrag="true" type="arrow" noautohide="false">
        <vbox flex="1">
            <hbox flex="1">
                <label control="user-label" width="60px" value="Username:"/>
                <textbox id="user"/>
            </hbox>
            <hbox flex="1">
                <label control="pwd-label" width="60px" value="Password:"/>
                <textbox id="pwd"  type="password"/>
            </hbox>
            <hbox>
                <checkbox label="Ricordami" checked="false"/>
            </hbox>
            <hbox flex="1">
                <spacer flex="1"/>
                <button id="pwd" width="30px" label="Login"/>
            </hbox>
        </vbox>
    </panel>
</popupset>

现在,当我单击菜单按钮的“按钮”部分时,我正确地获得了登录弹出窗口,但是如果我单击箭头(“菜单”部分),它会显示菜单弹出窗口和菜单弹出窗口后面的登录弹出窗口,因为我认为当我单击箭头时也会触发“弹出”事件,但我只希望出现菜单弹出。如何达到这一点?我是 XUL 开发的新手。

4

1 回答 1

0

popup一个 s不能有两个button(尽管技术上不止一个)。

  1. 删除popup=属性。
  2. 显示来自您的弹出窗口oncommand

    document.getElementById("login-popup")
      .openPopup(event.originalTarget, 
                 "after_start",
                  0, 0,
                  false, true,
                  event);
    
  3. 您可能必须检查.originalTarget不是menuitem第一个,以避免popup在单击此类时触发您的触发器menuitem

另外:请在叠加层和叠加层脚本中使用足够独特的 DOM id/类和足够独特的变量/函数名称,以避免与其他插件或浏览器本身发生冲突。请参阅:JavaScript 对象管理

于 2013-09-17T12:57:49.613 回答