2010-11-24 67 views
10

¿Hay alguna manera de que pueda actualizar la ventana principal cuando se cierra una ventana emergente sin agregar ningún código javascript a la ventana emergente?Actualizar ventana padre cuando la ventana emergente está cerrada

Tengo una página parent.php en la que los usuarios pueden hacer clic en "abrir ventana emergente" para abrir una ventana emergente. Esta ventana emergente mostrará el contenido Flash y no es posible que yo añado algo así como

window.onunload = function(){ 
    window.opener.location.reload(); 
}; 

a la página ventana emergente marcado.

¿Hay algún otro método para lograr esto? Gracias

+1

has necesitado para agregar el controlador onunload a la manija de la ventana emergente de la ventana padre? – Gordon

+0

@Gordon - ¿perdón? – Kay

+0

como se muestra por benhowdle debajo de – Gordon

Respuesta

17

Para que esto funcione en todos los navegadores, lo que necesita para manejar el controlador de unload evento en la ventana emergente y hacer la recarga en la ventana principal. En la ventana principal, añadir

function popUpClosed() { 
    window.location.reload(); 
} 

en el emergente:

window.onunload = function() { 
    if (window.opener && !window.opener.closed) { 
     window.opener.popUpClosed(); 
    } 
}; 

Así que la respuesta a su pregunta es por lo general no, si usted necesita su código para que funcione en todos los navegadores, en particular, IE .

+0

cuando la URL está asegurada significa https: ¿no está pidiendo una ventana con los botones Reintentar y Cancelar "realmente quiero enviar datos"? – changeme

6

Estoy seguro de que se puede simplemente añadir esto a parent.php:

var myPop = "pop up window selector" 
myPop.onunload = function(){ 
    location.reload(); 
}; 
+0

+1 pero podría cambiar ' var myPop = "selector de ventana emergente" 'a' var myPop = window.open(); 'para hacer el ejemplo más claro – Gordon

+0

Lo siento, no pude pensar en el selector de la parte superior de mi cabeza!Gracias por señalar eso Gordon – benhowdle89

+0

Esto no funcionará en IE. Mi respuesta lo hará. Por favor, deje de votarlo arriba. –

1

tuvo un problema similar para detectar el mensaje emergente de cierre en la ventana primaria. Creo que el motivo fue al no establecer la propiedad document.domain.

ninguna manera añadir a Tim Abajo responder a la propiedad document.domain tanto para la ventana emergente y de esta manera:

<script type="text/javascript"> 
     document.domain='<?=$_SERVER['SERVER_NAME']?>'; 
    </script> 

y en lugar de

window.onunload = function() { 
    if (window.opener && !window.opener.closed) { 
     window.opener.popUpClosed(); 
    } 
}; 

que utilicé en la ventana emergente:

 <body onunload="window.opener.popUpClosed();"> 
2

El problema con el método de Tim Down es que no responde la pregunta original. El requisito es que no pueda agregar ningún código a la ventana emergente.

Una solución que he encontrado, aunque no particularmente elegante, es efectiva en todos los navegadores en los que he probado.

Simplemente va a sondear el objeto de ventana recién creado continuamente, verificando si todavía está abierto.

En ventana padre:

var register; 
    var poll; 

    function isOpen(){ 
     if(register.closed){alert("Closed!"); clearInterval(poll);} 
    } 


    function create(){ 

     register = window.open("http://www.google.com","register","width=425,height=550"); 
     poll=setInterval("isOpen()",100); //Poll every 100 ms. 
} 
Cuestiones relacionadas