2010-07-03 47 views
2

我是XUL的初学者。我有以下问题。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,所以如果我从来没有进入。我想这是因为窗户本身就是另一个镀铬物。

但是,如果是这样,我怎样才能使窗户彼此交互?是否可以将窗口从一个窗口小部件集中到另一个窗口?我无法从模块中执行此操作,因为文档和窗口在此处不可用。

回答

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>