在多个窗口中动态生成Firefox工具栏内容

时间:2014-03-01 15:36:53

标签: firefox-addon

我有一个奇怪的。我想生成附加到工具栏的menupopup的动态内容。如果我只调出一个窗口,这可以很好地工作。如果我提出多个,并点击第二个中的menupopup,它将不会在第一个弹出。如果我先在第一个窗口中显示弹出窗口,它会在那里工作,在第二个窗口中。这是我的重叠代码:

<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>

我可以在所有窗口中看到“PersonaSwitcher.buttonPopup”方法。它动态生成menupopup和menuitems,看似没有问题。有谁知道什么可能是错的或我在哪里可以看?非常感谢!

2 个答案:

答案 0 :(得分:0)

你可以发布buttonPopup()的代码..... 如果您正在使用appendChild()尝试使用cloneNode(),那会有帮助吗?

答案 1 :(得分:0)

嘿,我找不到任何ID为BrowserToolbarPalette的东西,所以我使用的是#nav-bar

向浏览器打开暂存器设置环境并粘贴并运行它,它可以正常工作。

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>