ventana transparente pestaña open nueva emergente ejemplo cerrar centrada abrir javascript windows popup

javascript - transparente - ¿Cómo puedo verificar si hay una URL abierta en otra ventana?



window.open javascript ejemplo (6)

@annakata (e incluso si los almacenaste, no tendrías permiso para cerrarlos más)

No es verdad. Si tiene el nombre de la ventana, puede usar window.open para restablecer un enlace a la ventana, incluso si el abridor se cerró y se volvió a abrir. Por ejemplo:

<script> function winOpen(url){ return window.open(url,getWinName(url)); } function winClose(url){ var win = window.open("",getWinName(url)); win.close(); } function getWinName(url){ return "win" + url.replace(/[^A-Za-z0-9/-/_]*/g,""); } </script> <a href="#" onclick="winOpen(''http://google.com'');return false;">Click me first</a>, close and open this window, then <a href="#" onclick="winClose(''http://google.com'');return false;">click me to close the other window</a>

Esta es una continuación de mi última pregunta. Abrir una ventana si la ventana ya no existe. Esencialmente, ahora estoy manteniendo una lista de todas las referencias de ventana que han sido abiertas por una página, y solo permitiendo que se abran si son no ya abierto. 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.

¿Es posible recorrer las ventanas abiertas en un navegador, buscando una URL en particular?

Editar: después de una gran cantidad 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; } }


Configure una matriz e increméntela con referencias de ventana cuando las abra ...

var wins = new Array(); function openWindow(url) { wins.push(window.open(url)); }

Luego, cuando desee verificar el estado de las ventanas, puede recorrerlas de esta manera y eliminar las ventanas que no están abiertas ...

function updateWindowArray() { for(var i = 0, l = wins.length; i < l; i++) { if(wins[i] == null || wins[i].closed) arrayRemove(wins, i, i + 1); } } function arrayRemove(array, from, to) { var rest = array.slice((to || from) + 1 || array.length); array.length = from < 0 ? array.length + from : from; return array.push.apply(array, rest); }

Atentamente...


En JavaScript, solo puede obtener referencias a la ventana actual y a cualquier ventana que abra con window.open .

Sin embargo, podría verificar winRef.closed para ver si el usuario cerró la ventana. Sin embargo, no estoy seguro de si esto funciona bien en todos los navegadores o no.


En realidad podrías hacerlo con cookies, pero ... si me preguntas, no lo harás.


No, esto sería un problema de seguridad / privacidad.

Como otros han mencionado el almacenamiento del estado de propiedad / cookie: esto solo funciona si también es el mismo documento que abrió la ventana, es decir, en el escenario donde el usuario cierra la ventana y vuelve a abrir, estas referencias se pierden (e incluso si los almacenaste, no tendrías permiso para cerrarlos más)


Si le dio a cada ventana un nombre de ventana único (el segundo argumento de window.open), al llamar a window.open nuevamente con el mismo nombre de ventana se abrirá la ventana si está cerrado, o se devolverá una referencia a la ventana existente sin abrir un nuevo ventana.