我是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。我想这是因为窗口本身就是另一个镀铬。
但如果是这样,我如何让窗户互相交互?是否可以将窗口小部件的窗口聚焦在另一个窗口中?我无法从模块中执行此操作,因为文档和窗口在那里不可用。
答案 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>