ventanas ventana una mostrar modal emergentes ejemplo ejecutar div desde javascript jquery

mostrar - ¿Cómo puedo plantear un evento(jQuery o Javascript vainilla) cuando se cierra una ventana emergente?



ventana modal css jquery (8)

Quiero plantear un evento cuando se cierra una ventana emergente, o preferiblemente, justo antes de cerrar. Estoy almacenando el objeto de la ventana emergente como un objeto, pero no conozco ninguna forma de enlazar al evento de cierre, o un evento justo antes de que se cierre la ventana.

var popupWindow = window.open("/popup.aspx", "popupWindow", "height=550,width=780");

¿Hay alguna forma de suscribirse al evento close usando jQuery, o simplemente javascript en bruto? Estoy usando jQuery y no puedo agregar otra biblioteca, así que si no se puede hacer en jQuery tendré que implementar mi propio sistema de eventos de alguna manera para que funcione en todos los navegadores.

ACTUALIZAR:
Intenté utilizar el evento de descarga en jQuery y, por alguna razón, el evento se genera tan pronto como se abre mi ventana emergente en lugar de cuando se cierra. Si utilizo Firebug para configurar un punto de interrupción para retrasar el evento de descarga de la suscripción, el evento de descarga funciona de la manera que se supone, pero por alguna razón, no funciona correctamente cuando se permite que el javascript se ejecute de forma natural.

var popupWindow = window.open("/popup.aspx", "popupWindow", "height=550,width=780"); $(popupWindow.window).unload(function() { alert(''hello''); });

¿Alguien tiene alguna idea de por qué el evento de descarga podría surgir cuando se carga la ventana?

Otro inconveniente es que noté que el evento de "descarga" de jQuery no permanece suscrito a la ventana como lo hace normalmente si solo lo hago:

popupWindow.onunload = function(){alert(''hello'')};

Parece darse de baja del evento cada vez que se produce. Se supone que pase esto? Si no fuera por este error (¿o característica?) En jQuery, sería mejor tener el evento levantado en carga, ya que puedo verificar la propiedad popupWindow.closed dentro del evento para asegurar que la ventana realmente se cerró.


El ejemplo del código jQuery para el evento de descarga

$(window).unload( function () { alert("Bye now!"); } );

De la documentación de descarga jQuery

Editar:

Jugué y no pude obtener la ventana principal para poder configurar la descarga. La única forma en que podía hacer que funcionara, era tener el script presente en la ventana emergente html. La ventana emergente también necesitaba cargar jQuery. No tengo nada basado en esto, pero creo que la descarga se está desencadenando, porque esencialmente la ventana emergente se está descargando desde el alcance de la ventana principal. Solo una suposición.


Por lo que comprobé, la descarga de jQuery es solo una envoltura para la función nativa. Podría estar equivocado ya que no cavé tan profundo.

Este ejemplo funcionó para mí.

$(document).ready(function(){ $(window).unload( function (){ alert(''preget''); $.get( ''/some.php'', { request: ''some'' } ); alert(''postget''); }); });

Recuerde que algunos navegadores bloquean la ventana. Abre solicitudes en la descarga, IE por ejemplo .


Creé un observador que verifica si la ventana se ha cerrado:

var w = window.open("http://www.google.com", "_blank", ''top=442,width=480,height=460,resizable=yes'', true); var watchClose = setInterval(function() { if (w.closed) { clearTimeout(watchClose); //Do something here... } }, 200);


Intenté el enfoque de observador, pero me encontré con el problema de "permiso denegado" al usar esto en IE6. Esto sucede debido a que la propiedad cerrada no es totalmente accesible en el caso de cerrar la ventana ... pero, afortunadamente, con una {{{{{{{{} {}} {} {} {} catch construction} funciona: o)

var w = window.open("http://www.google.com", "_blank", ''top=442,width=480,height=460,resizable=yes'', true); var watchClose = setInterval(function() { try { if (w.closed) { clearTimeout(watchClose); //Do something here... } } catch (e) {} }, 200);

Gracias Magnus


Creo que descubrí lo que está pasando:

Cuando usa window.open , abre una nueva ventana con la ubicación "about: blank" y luego la cambia a la url que proporcionó en la llamada a la función.

Por lo tanto, el evento de descarga está vinculado antes del cambio de "aproximadamente: en blanco" a la URL correcta y se activa cuando ocurre el cambio.

Lo tengo trabajando con JQuery al hacer esto:

$(function(){ var win = window.open(''http://url-at-same-domain.com'',''Test'', ''width=600,height=500''); $(win).unload(function(){ if(this.location == ''about:blank'') { $(this).unload(function(){ // do something here }); } }); });


Hay una pequeña captura que tengo que mencionar en relación con las menciones anteriores de onunload basadas en mi experiencia previa:

Opera 9.0.x-9.2.x solo ejecuta window.onUnload si el usuario navega fuera de una página. Si el usuario cierra la ventana, el evento nunca se disparará. Sospecho que esto se hizo para combatir el problema emergente de autorrecarga (donde una ventana emergente podría reabrirse al cerrar la página).

Es muy probable que esto haya persistido en Opera 9.5.x. Otros navegadores también pueden implementar esto, pero no creo que IE o Firefox lo hagan.