Pregunta

Tenemos la siguiente situación, que va desde un único dominio:

Una página utiliza window.open() para abrir una ventana llamada (un jugador emergente). window.open() da la página A una referencia a la ventana.

El usuario ahora vuelve a cargar la página A. se pierde la referencia a la ventana llamada. Usando window.open() de "encontrar" la ventana tiene el efecto secundario desafortunado de recarga del mismo (no deseada). ¿Hay alguna otra manera de obtener una referencia a esta ventana?

¿Fue útil?

Solución

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. Dado que la URL está en blanco, no se volverá a cargar el contenido de la ventana.

Otros consejos

Que yo sepa, no existe, no ..

A de tipo de sucia, pero-i-supongo-que-voluntad-de trabajo truco sería la de restablecer periódicamente la referencia en la ventana padre desde el interior de la ventana emergente usando window.opener, con algo parecido a este código:

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

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

En realidad lo que hizo es destruir la matriz (página A) de la ventana creada (emergente), por lo que no tiene más referencia a la matriz original, por lo tanto, no se puede obtener una referencia directa.

La única solución que se me ocurre está utilizando un navegador que le ofrece añadido Javascript capacidad para desplazarse por las ventanas activas (pestañas) y encontrar uno que tiene una propiedad especial (es decir: la página vuelve a cargar a) que es reconocido por el emergente .

Por desgracia creo que solamente Firefox tiene alguna capacidad adicional o la extensión que le da esta flexibilidad. (Que también es un riesgo de seguridad, aunque)

Esto debería funcionar. Añadir este código en la ventana emergente:

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

updateOpener(); 

Y esto a su proceso de carga de la ventana padre. Para asegurarse de que se han establecido myPopupWindow esperar 100 ms antes de acceder a él.

setTimeout(function() {
    if (document.myPopupWindow) 
        document.myPopupWindow.focus();
}, 100);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top