Firefox addon 在多个窗口中动态生成Firefox toobar内容

Firefox addon 在多个窗口中动态生成Firefox toobar内容,firefox-addon,Firefox Addon,我有一个奇怪的。我想动态生成附在工具栏上的菜单的内容。如果我只打开一个窗口,这个效果会非常好。如果我调出多个菜单,然后在第二个菜单上单击,它将不会在第一个菜单中弹出。如果我先在第一个窗口中打开弹出窗口,它会在那里和第二个窗口中工作。这是我的覆盖代码: <toolbarpalette id="BrowserToolbarPalette"> <toolbarbutton id="personaswitcher-button" label="&

我有一个奇怪的。我想动态生成附在工具栏上的菜单的内容。如果我只打开一个窗口,这个效果会非常好。如果我调出多个菜单,然后在第二个菜单上单击,它将不会在第一个菜单中弹出。如果我先在第一个窗口中打开弹出窗口,它会在那里和第二个窗口中工作。这是我的覆盖代码:

<toolbarpalette id="BrowserToolbarPalette">
    <toolbarbutton
        id="personaswitcher-button"
        label="&personaswitcher-button.label;"
        tooltiptext="&personaswitcher-button.tooltip;"
        type="menu">
        <menupopup
            id="personaswitcher-addon"
            onpopupshowing="PersonaSwitcher.buttonPopup (event);"
            onpopuphidden="PersonaSwitcher.hideSubMenu();"
        />
    </toolbarbutton>
</toolbarpalette>


我可以看到“PersonalSwitcher.ButtonPoup”方法在所有窗口中都被调用。它动态生成menupopup和menuitems,似乎没有问题。有没有人知道可能出了什么问题,或者我可以看看哪里?多谢

你能发布
按钮pup()
的代码吗。。。。。
如果您使用的是
appendChild()
请尝试使用
cloneNode()
,这样有帮助吗?

嘿,伙计,我找不到任何ID为BrowserToolbarPalette的东西,所以我改用了#导航栏

打开scratchpad set environment到浏览器,粘贴并运行它,它工作正常

var me = Services.wm.getMostRecentWindow(null);
var navBar = document.querySelector('#nav-bar');

var myToolBarButton = document.createElement('toolbarbutton');
var props = {
    id: 'personaswitcher-button',
    label: 'personaswitcher-button.label;',
    tooltiptext: 'personaswitcher-button.tooltip',
    type: 'menu'
}
for (var p in props) {
    myToolBarButton.setAttribute(p, props[p]);
}

var menuPopup = document.createElement('menupopup');
var props = {
    id: 'personaswithcer-addon',
    onpopupshowing: 'PersonaSwitcher.buttonPopup (event);',
    onpopuphidden: 'PersonaSwitcher.hideSubMenu();'
}
for (var p in props) {
    menuPopup.setAttribute(p, props[p]);
}

var myMenuItem = document.createElement('menuitem');
myMenuItem.setAttribute('label','a menu item');

menuPopup.appendChild(myMenuItem);
myToolBarButton.appendChild(menuPopup);
navBar.appendChild(myToolBarButton);
因此,如果上述方法有效,请尝试将覆盖更改为:

<toolbar id="nav-bar">
    <toolbarbutton
        id="personaswitcher-button"
        label="&personaswitcher-button.label;"
        tooltiptext="&personaswitcher-button.tooltip;"
        type="menu">
        <menupopup
            id="personaswitcher-addon"
            onpopupshowing="PersonaSwitcher.buttonPopup (event);"
            onpopuphidden="PersonaSwitcher.hideSubMenu();"
        />
    </toolbarbutton>
</toolbarpalette>


您在澳大利亚是否有此问题?我不太确定这个覆盖我不做太多的覆盖,我可以给你一个引导解决方案,虽然你想看看吗?不,不使用Australis。在这一点上,我被难住了,所以任何人能提供的都是感激的。谢谢再多一点数据。在一个好的窗口中:state=showing和anchorNode=[object xulement],并设置innerHTML。在一个坏窗口中:state=closed和anchorNode=null Hmm。我现在添加了在创建第一个窗口时调用menupopup创建方法。这似乎是可行的,但我不确定这是否是最好的方法…在ButtonPoup中调用createMenuPopup,然后创建新的menuitem,所以我不确定cloneNode是否有帮助,但我可以尝试。我目前的解决方法是在创建第一个窗口时创建菜单,但我不确定这是最干净的方法。谢谢谢谢你的帮助!BrowserToolbarPalette来自于查看,我在chrome/content/overlay-fx.xul中设置了它。在第一个窗口上切换创建菜单后,它们每隔一个窗口显示一次。所以现在我在所有windows onload中创建它们,它的工作方式和我预期的一样。再次感谢!酷男人我不知道这是否会有帮助:)我认为你仍然可以做叠加只是可能放弃BorwserToolbarPalette链接是一个死链接