2010-07-03 71 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>