не влияет на: appShellService.unregisterTopLevelWindow(topXulWindow); (скрыть окно)

Я накладываю chrome://browser/content/browser.xul на .xul, добавляя кнопку в главное меню. щелчок по нему открывает другое окно ChromeWindow с окном .xul.

var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"].getService(Components.interfaces.nsIWindowWatcher);
var bgwin = ww.openWindow(null, 'chrome://myextension/content/myBrowser.xul', 'MyName', "chrome, resizable=yes, width=1024, height=600, minimizable, maximizable", []);

хром://myextension/content/myBrowser.xul:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window id="myextension-my-browser"
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    title="mybrowser"
    windowtype="mybrowser"
    >
    <script type="application/x-javascript" src="chrome://myextension/content/myBrowser.js" />
    <browser id="browser" type="content" flex="1" src="about:blank" />
</window>

который отлично работает. но тогда я хочу скрыть это окно. сделать его полностью невидимым, выполнив (в myBrowser.js). Но ничего не происходит:

var topXulWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
            .getInterface(Components.interfaces.nsIWebNavigation)
            .QueryInterface(Components.interfaces.nsIDocShellTreeItem).treeOwner
            .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
            .getInterface(Components.interfaces.nsIXULWindow);
var appShellService = Components.classes["@mozilla.org/appshell/appShellService;1"].getService(Components.interfaces.nsIAppShellService);               
appShellService.unregisterTopLevelWindow(topXulWindow);

Мой вопрос

Что я делаю неправильно? Почему окно не исчезает?


person spaxxUnited    schedule 16.03.2013    source источник


Ответы (1)


Добавьте к коду следующий фрагмент

var basewindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
  .getInterface(Components.interfaces.nsIWebNavigation)
  .QueryInterface(Components.interfaces.nsIDocShell)
  .QueryInterface(Components.interfaces.nsIDocShellTreeItem).treeOwner
  .QueryInterface(Components.interfaces.nsIBaseWindow);

basewindow.visibility = false;
basewindow.enabled = false;

// now unregister
person paa    schedule 16.03.2013
comment
Спасибо! Я также узнал, что вам нужно, чтобы base.enabled был истинным, когда вы пытаетесь nsIDOMWindowUtils.sendMouseEvent click|mousedown|mouseup|... для имитации щелчка. - person spaxxUnited; 17.03.2013