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, если вы открываете окна самостоятельно, потому что вы задаете имя окна воткрыть функцию.Это невидимо для пользователя, поэтому у вас есть немного больше гибкости
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" );
}