XUL窗口之间的交互

时间:2010-07-03 01:16:47

标签: xul firefox-addon

我是XUL的初学者。我有以下问题。

在浏览器覆盖中,我声明了一个菜单项,它打开了一个新窗口 - 到目前为止一直很好。

menu_entry.addEventListener('command', function() {
    window.open('chrome://myextension/content/mywindow.xul',
    'myextension-mywindow',
    'chrome,centerscreen');
}, false);

我希望这更灵活。如果窗口已经打开,则应该将其聚焦。这就是我试过的

menu_entry.addEventListener('command', function() {
    let mywindow = document.getElementById('myextension-mywindow');
    if (mywindow) {
        mywindow.focus();
    }
    else {
        window.open('chrome://myextension/content/mywindow.xul',
        'myextension-mywindow',
        'chrome,centerscreen');
    }
}, false);

问题是document.getElementById('myextension-mywindow')总是返回null,所以我从不输入if。我想这是因为窗口本身就是另一个镀铬。

但如果是这样,我如何让窗户互相交互?是否可以将窗口小部件的窗口聚焦在另一个窗口中?我无法从模块中执行此操作,因为文档和窗口在那里不可用。

1 个答案:

答案 0 :(得分:4)

我终于发现我必须使用nsiWindowMeditator。我所要做的只是

menu_entry.addEventListener('command', function() {
    let windowManager = Cc['@mozilla.org/appshell/window-mediator;1'].
        getService(Ci.nsIWindowMediator);
    let mywindow = windowManager.getMostRecentWindow('mywindowtype');
    if (mywindow) {
        mywindow.focus();
    }
    else {
        window.open('chrome://myextension/content/mywindow.xul',
        'myextension-mywindow',
        'chrome,centerscreen');
    }
}, false);

然后在xul

<window id="myextension-mywindow" windowtype="mywindowtype>
...
</window>