如何检查给定的窗口是否在Xul中打开?

时间:2011-02-02 16:24:09

标签: xul

如何检查某个窗口是否在Xul中打开?

我想检查一下我的桌面应用程序中是否已打开一个窗口。如果是的话,我不会再打开它。

- 我的尝试

我正在尝试使用窗口标题完成此操作,因此我从windowManager获取窗口列表并检查标题,但getAttribute不是来自我可以查询的界面,它来自element,我应该使用什么界面?

var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);
var enum = windowManager.getXULWindowEnumerator(null);
while(enum.hasMoreElements()) {
    var win = enum.getNext().QueryInterface(Components.interfaces[" WHICH INTERFACE TO PUT HERE? "]);
    write("WINDOW TITLE = " + win.getAttribute("title"));
}

2 个答案:

答案 0 :(得分:3)

如果您在文档的windowtype="myWindowType"元素上设置<window>属性,那么您只需使用windowMediator.getMostRecentWindow('myWindowType');即可查看是否已打开一个。

答案 1 :(得分:1)

var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);
var enum = windowManager.getEnumerator(null);
while(enum.hasMoreElements()) {
  var win = enum.getNext().QueryInterface( Components.interfaces.nsIDOMChromeWindow );
  write("WINDOW TITLE = " + win.document.documentElement.getAttribute("title") );
}

如果您使用的是getXULWindowEnumerator,则应使用Components.interfaces.nsIXULWindow

如果您打开自己的窗口,可能会使用nsIDOMWindow属性名称,因为您在open函数中设置了窗口的名称。这对用户不可见,因此您可以更灵活地使用

var win = window.open( "chrome://myextension/content/about.xul", 
                          "windowName", "chrome,centerscreen" );

write( "WINDOW NAME: " + win.name ); // Should now give  WINDOW NAME: windowName

如果您将窗口名称留空,则每次都会打开一个新窗口。但是,如果你使用一个窗口名称(不是“”),它将创建它(如果它不存在),或者在已经存在的窗口中加载你指定名称的新内容。

这几乎就像你想要的那样。但是如果必须的话,你可以使用name属性来避免重新加载。

var openNewWindow = true;
var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);
var enum = windowManager.getEnumerator(null);

while(enum.hasMoreElements()) {
  var win = enum.getNext().QueryInterface( Components.interfaces.nsIDOMChromeWindow );
  if( win.name == "windowName" ) {
    openNewWindow = false;
  }
}

if( openNewWindow ) {
  var win = window.open( "chrome://myextension/content/about.xul", 
                      "windowName", "chrome" );
}