2012-02-22 28 views

Respuesta

66

Su ejemplo funcionará , siempre y cuando la ventana url emergente está en el mismo dominio que la página padre, y cambia el evento para todas las minúsculas:

var new_window = window.open('some url') 
new_window.onbeforeunload = function(){ my code} 
+3

¿Qué sucede si la ventana recién abierta no está en el mismo dominio con la ventana principal? ¿Hay algún truco? – xiaohan2012

+11

Lo mejor que puede hacer es abrir un documento en su dominio que luego carga la URL remota en un iframe, o la lee mediante scripts de servidor y la procesa desde allí. – glortho

+1

@glortho ¿Tiene este enfoque alguna ventaja sobre la definición del evento onbeforeunload dentro de new_window? Más específicamente, ¿si esto enlazará el código inmediatamente con la nueva ventana, incluso antes de que se carguen la nueva página y sus scripts? –

3

Debe vincular el evento onbeforeunload a la ventana DESPUÉS de que se abra.

La forma más sencilla de hacerlo sería tener el javascript antes de descargar el código dentro del código fuente de la ventana.

Para obtener explicaciones detalladas, consulte estas dos preguntas muy similares here y here en Stackoverflow.

+13

Sí, son ** MUY ** preguntas similares ... – jondavidjohn

+0

Gracias. De hecho 'onbeforeunload' y' onunload' DEBEN estar delimitados DESPUÉS de que la ventana secundaria se haya cargado para funcionar correctamente. – Xavi

11

El nombre del evento es onbeforeunload y no onBeforeUnload. JS es sensible a mayúsculas y minúsculas

+0

si adjuntamos eventos usando en él se adjunta como propiedad en línea a html y html es en caso de que sea sensible esto significa que esto no hará absolutamente ninguna diferencia – nikoss

-1
var new_window = window.open('some_url') 

También puede comprobar si es new_window.windownull. Pero debe verificarlo manualmente con las funciones setTimeout o setInterval.

Esta es la única forma de cómo comprobarlo cuando no se está en el mismo dominio.

+0

Esto es útil si tiene un método global que se abre y administra Windows para usted, y la url puede ser interna o externa según el contexto – jimconte

2

Mientras que la respuesta aceptada es correcta para el mismo origen he encontrado una solución para las ventanas emergentes de origen transversales:

var win = window.open('http://www.google.com'); 
var timer = setInterval(function() { 
    if(win.closed) { 
     clearInterval(timer); 
     alert('closed'); 
    } 
}, 1000); 

Fuente: atashbahar.com

Para aquellos que están considerando el uso de la misma.

Incluso Facebook está utilizando este "truco" en su Javascript SDK.

Puede verificar esto echando un vistazo a su código. Solo busque .closed en https://connect.facebook.net/en_US/sdk.js.

Cuestiones relacionadas