弹出动态添加后,XUL MenuItem消失

时间:2011-10-19 18:57:00

标签: javascript firefox firefox-addon xul

我正在尝试将子菜单添加到动态构建的弹出菜单中,当您右键单击浏览器窗口中的任意位置时,该菜单会出现。第一个级别构建正常,但是当我尝试向这些条目添加弹出窗口时,菜单项会消失。

这是我正在构建的对象:

var snpshot = {
    'Head':'', 
    'Subhead':'',
    'Date':'',
    'Url':'',
};

这是我的onLoad事件中存储的代码,因此在浏览器启动时构建菜单:

似乎不起作用的部分是rclickItem.appendChild(mPopup) - 它正在做'某事'但弹出窗口添加的菜单条目变为空白并缩小,但滚动它上方的光标似乎暗示它们仍在那里。

  onLoad: function() {
    var mainPop = document.createElementNS(XUL_NS, "menupopup");
    mainPop.setAttribute('id', 'rclickMenu_MenuPopupContainer');

    //attach it to main rclick object
    var mainRclick = document.getElementById("rclickMenu_Main");
    mainRclick.appendChild(mainPop);

    mainOverlay.createMainRclick(); //THIS WORKS
    //add popups -- AS SOON AS THE POPUPS ARE ADDED THE ENTRIES DISAPPEAR!
    mainOverlay.createPopUpMenus();
},

createMenuItem: function(lblToUse){
    //create the XUL menuitem
    var itemToAdd = document.createElementNS(XUL_NS, "menuitem");
    itemToAdd.setAttribute('label',lblToUse);
    itemToAdd.setAttribute('id','rclickMenu_'+lblToUse);
    return itemToAdd;
},

createMenuPopup: function(idToUse){
    var mPopup = document.createElementNS(XUL_NS, "menupopup");
    mPopup.setAttribute('id','rclickMenuPopup_' + idToUse );
    return mPopup;
},

createMainRclick: function(){
    for (var property in snpshot){
        var mItem = mainOverlay.createMenuItem( property );
        var mainPop = document.getElementById("rclickMenu_MenuPopupContainer");
        mainPop.appendChild(mItem);
    }
},

createPopUpMenus: function(){
    for (var property in snpshot){
        var mPopup = mainOverlay.createMenuPopup( property );

        var rclickItem = document.getElementById("rclickMenu_"+property);
        rclickItem.appendChild(mPopup);
    }
},

和XUL(这是右键单击时出现的主要弹出窗口,添加了我的菜单项(我在js中动态添加)

<menupopup id="contentAreaContextMenu">

    <menu 
     id="rclickMenu_Main" 
     label="Main Section">
    </menu>

</menupopup>

1 个答案:

答案 0 :(得分:2)

来自<menupopup> documentation

  

它可以放在menumenulisttoolbarbuttonbutton

请注意<menuitem>标记不在该列表中。事实上,您的<menupopup>代码的父母应该是<menu>代码 - 然后您将获得一个子菜单(请参阅documentation)。 <menuitem>标记始终是单个菜单项。

供参考,将<menupopup>添加到<menuitem>标记时会发生什么:此标记会替换自动生成的<menuitem>内容。 <menupopup>不是视觉元素,所以你得到的是一个没有任何可见内容的菜单项。