如何检查某个窗口是否在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"));
}
答案 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" );
}