Esto es una continuación de mi última pregunta Open a window if the window does not already exist Básicamente, ahora estoy manteniendo una lista de todas las referencias de ventanas que han sido abiertas por una página, y solo permitiéndolas abrirlas si aún no están abiertas. Entonces me llamó la atención un problema potencial: por supuesto, es posible que un usuario cierre la ventana original y la abra de nuevo, perdiendo así la lista de referencias a ventanas.¿Cómo puedo verificar si hay una URL abierta en otra ventana?
¿Es posible recorrer las ventanas abiertas en un navegador, buscando una URL en particular?
Editar: Después de un montón de comentarios útiles aquí (y en la otra pregunta), aquí está el código final para el iniciador de aplicaciones. Básicamente, trata de obtener la ubicación de la ventana abierta con el nombre apropiado. Si eso causa una excepción (debido a un problema de privacidad), entonces se considera que la aplicación se ha cargado. Si es "about: blank", entonces es una nueva ventana. Esto funciona en Firefox, IE7 y Google Chrome. Se siente sucio ...
var g_urlarray = [];
Array.prototype.has = function(value) {
var i;
for (var i in this) {
if (i === value) {
return true;
}
}
return false;
};
function launchApplication(l_url, l_windowName)
{
var l_width = screen.availWidth;
var l_height = screen.availHeight;
var winRef;
var l_params = 'status=1' +
',resizable=1' +
',scrollbars=1' +
',width=' + l_width +
',height=' + l_height +
',left=0' +
',top=0';
if (g_urlarray.has(l_url)) {
winRef = g_urlarray[l_url];
}
if (winRef == null || winRef.closed) {
winRef = window.open('', l_windowName, l_params);
var l_openNew = 0;
try {
if (winRef.location == 'about:blank') {
l_openNew = 1;
}
}
catch (e) {
l_openNew = 0;
}
if (l_openNew === 1)
{
winRef.location = l_url;
winRef.moveTo(0,0);
winRef.resizeTo(l_width, l_height);
}
g_urlarray[l_url] = winRef;
}
}
Esto no funciona para mí en FF, Chrome, Opera o IE, ¿soy yo? – annakata
No podría decírtelo. Me funcionó en IE. – adam0101