javascript window.open

javascript - Buscar ventana previamente abierta por window.open



(4)

Tenemos la siguiente situación, ejecutando desde un solo dominio:

La página A usa window.open() para abrir una ventana con nombre (un reproductor emergente). window.open() le da a la página A una referencia a la ventana.

El usuario ahora vuelve a cargar la página A. La referencia a la ventana nombrada se pierde. El uso de window.open() para "encontrar" la ventana tiene el desafortunado efecto secundario de volver a cargarla (indeseable). ¿Hay alguna otra manera de obtener una referencia a esta ventana?


AFAIK, no, no hay ...

Un truco de tipo sucio, pero supongo que funcionará sería restablecer periódicamente la referencia en la ventana principal desde dentro de la ventana emergente usando window.opener, con algo como este código:

setInterval(function() { if(window.opener) { window.opener.document.myPopupWindow = window } }, 100)

En la ventana principal, podrá acceder a document.myPopupWindow, incluso después de una recarga (bueno, 100 ms después de la recarga). Esto debería funcionar en el navegador cruzado.


En realidad, lo que hizo fue destruir al padre (página A) de la ventana creada (ventana emergente), por lo que no tiene más referencias al padre original, por lo que no puede obtener una referencia directa.

La única solución que se me ocurre es usar un navegador que ofrezca la capacidad de javascript adicional para recorrer las ventanas activas (pestañas) y encontrar una que tenga una propiedad especial (es decir, su página A recargada) que sea reconocida por la ventana emergente.

Desafortunadamente, supongo que solo Firefox tiene alguna capacidad o extensión adicional que le brinda esta flexibilidad. (aunque también es un riesgo de seguridad)


Esto debería funcionar. Agregue este código en la ventana emergente:

function updateOpener() { if (window.opener) window.opener.document.myPopupWindow = window; else setTimeout(updateOpener, 100); } updateOpener();

Y esta en la carga de la ventana padre. Para asegurarse de que myPopupWindow se haya configurado, espere 100 ms antes de acceder.

setTimeout(function() { if (document.myPopupWindow) document.myPopupWindow.focus(); }, 100);


Prueba esto:

var playerUrl = ''http://my.player...''; var popupPlayer= window.open('''', ''popupPlayer'', ''width=150,height=100'') ; if(popupPlayer.location.href == ''about:blank'' ){ popupPlayer.location = playerUrl ; } popupPlayer.focus();

Se abrirá una ventana en blanco con un nombre único. Como la URL está en blanco, el contenido de la ventana no se volverá a cargar.