Взаимодействие между окнами XUL - PullRequest
2 голосов
/ 03 июля 2010

Я новичок в 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') всегда возвращает ноль, поэтому я никогда не вводю if.Я думаю, это потому, что окно само по себе является другим хромом.

Но если это так, как я могу заставить окна взаимодействовать друг с другом?Можно ли сфокусировать окно из виджета в другом окне?Я не могу сделать это из модуля, так как там нет документа и окна.

1 Ответ

4 голосов
/ 04 июля 2010

Я наконец-то обнаружил, что должен использовать 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>
...