Detectar cierre de navegador (o pestaña?) en IE, Firefox,Chrome

9,889 views
Skip to first unread message

Carlos Admirador

unread,
Jul 10, 2015, 7:31:47 AM7/10/15
to altnet-...@googlegroups.com
Hola grupo!!!

Respecto a este tema, detectar el cierre del navegador con javascript, no es nada trivial. Buceando bastante en la web pero soluciones que no funcionan en los tres navegadores más comunes.
¿Habéis implementado una solución eficaz y que funcione para  casi todos los navegadores (IE, Chrome, Mozilla) ? Si además es con  JQuery sería la guinda :)

 

Para detectar F5

var code = (e.keyCode ? e.keyCode : e.which);

if(code == 116) {

}


Así funciona para IE, Chrome, Firefox, Safari; no está soportado para Opera. Funciona OK para Alt-F4, la X de la pestaña y navegador, y atención NO DISCRIMINA si es F5, postback o reload

  window.onbeforeunload = function (e) {

           e = e || window.event;

           if (e) {

               DetectBrowserExit();

           }

       }


 

Encontré alguna referencia al respecto pero meten mucho ruido, no es nada trivial :’(

http://stackoverflow.com/questions/20853142/trying-to-detect-browser-close-event

Alguna sugerencia sobre este tema? Gracias grupo !!!
Saludos
Carlos

Vicenç Garcia

unread,
Jul 10, 2015, 7:40:33 AM7/10/15
to altnet-...@googlegroups.com
Yo siempre he utilizado el onbeforeunload.

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--

Carlos Admirador

unread,
Jul 10, 2015, 7:42:22 AM7/10/15
to altnet-...@googlegroups.com

Me comento un compañero que para IE11 parece que no funciona correctamente. Se trata detectar el cierre del navegador, pero lo que he visto hasta ahora detecta el cambio o recarga de página (evento: window.onbeforeunload), pero no he visto forma de distinguirlo del cierre del navegador (pestaña o cierre completo).

Leonardo Micheloni

unread,
Jul 10, 2015, 8:00:54 AM7/10/15
to altnet-hispano
No, no es trivial, y si si lo hacés todavía tenés el tema de cuánto tiempo tenés antes de que efectivamente se cierre el navegador hasta que puedas hacer algo. ¿Qué necesitás hacer?

Carlos Admirador

unread,
Jul 13, 2015, 8:02:53 AM7/13/15
to altnet-...@googlegroups.com
Llamar a una página ASP para hacer un Session.Abandon

Miguel Angel Jimenez Perez

unread,
Jul 13, 2015, 1:43:17 PM7/13/15
to altnet-...@googlegroups.com
a mi me ha funcionado:
$(window).on('unload', function (event) {
   // mandar tu llamada para el session.abandon
}

Creo que tendrias que probar,porque despues entre navegadores no funciona del todo, ese metodo en chrome funciona sin problemas.

Carlos Admirador

unread,
Jul 15, 2015, 8:09:41 AM7/15/15
to altnet-...@googlegroups.com

En Chrome. ¿Y no se ejecuta por cada cambio o recarga de página (lo que es un F5, refresh, o cuando cambias el foco de pestaña a otra?. Gracias.

Carlos Peix

unread,
Jul 16, 2015, 6:58:28 AM7/16/15
to altnet-hispano
2015-07-13 8:02 GMT-04:00 Carlos Admirador <admirado...@gmail.com>:
Llamar a una página ASP para hacer un Session.Abandon

Y por que necesitás hacer eso Carlos?

Leonardo Micheloni

unread,
Jul 16, 2015, 9:20:31 AM7/16/15
to altnet-hispano
Esa era mi siguiente pregunta.

--

Carlos Admirador

unread,
Jul 17, 2015, 7:31:52 AM7/17/15
to altnet-...@googlegroups.com
Hay veces que el Session_End no se ejecuta, y por eso quiero forzarlo cuando salen del navegador.
Es ASP clásico… (ASP 3.0)

Leonardo Micheloni

unread,
Jul 17, 2015, 8:28:06 AM7/17/15
to altnet-hispano
La sesión caduca sóla después del un tiempo de todos modos

Kiquenet

unread,
Jul 20, 2015, 8:35:02 AM7/20/15
to altnet-...@googlegroups.com

 
Suele caducar a los 20 minutos. Pero hay casos (ASP 3.0) que se quedan sesiones abiertas, y hasta que no se reinicia el IIS no desaparecen.

Saludos. 

Carlos Admirador

unread,
Jul 20, 2015, 3:09:41 PM7/20/15
to altnet-...@googlegroups.com
Gracias por las respuestas !!! Efectivamente hay sesiones que se mantienen abiertas, si no reinicias el IIS nada de nada !! Por eso pensaba en la opción de hacerlo con javascript al cerrar el navegador, pero toca pelearse con el dichoso javascript !!! será posible hacerlo ? Ya desespero entre eventos, navegadores y versiones...
Saludos
Carlos.

Carlos Peix

unread,
Jul 20, 2015, 9:23:28 PM7/20/15
to altnet-hispano
Yo diría que, a menos que tengas algún estudio objetivo que te indique que esas sesiones abiertas molestan, te olvides y dejes que IIS se arregle solo, ya es un señor mayor.

----------------------------------
Carlos Peix

--

Kiquenet

unread,
Oct 18, 2017, 4:51:14 PM10/18/17
to AltNet-Hispano

Hola a todos.

 

De este tema (que ha tenido mucho recorrido en años), y  utilizando este código

 

<script language="javascript" type="text/javascript">

    /* 

    NO DISCRIMINA LOS POSTBACK

        window.onbeforeunload = function (e) {

            var e = e || window.event;

            // For IE and Firefox

            if (e) {

                e.returnValue = 'ATENCION: DEBE RELLENAR LA ENCUESTA ANTES DE CERRAR';

            }

            // For Safari

            return 'ATENCION: DEBE RELLENAR LA ENCUESTA ANTES DE CERRAR';

        };

        window.onunload = function (e) {

            var e = e || window.event;

            // For IE and Firefox

            if (e) {

                e.returnValue = 'ATENCION: DEBE RELLENAR LA ENCUESTA ANTES DE CERRAR';

            }

            // For Safari

            return 'ATENCION: DEBE RELLENAR LA ENCUESTA ANTES DE CERRAR';

        };

    */

     </script>

 

 

Detecta cuando pulsas el X de la ventana, Alt+F4 y también si pulsas F5 o Actualizar.

También en cualquier Postback (al pulsar cualquier botón que haga submit en el formulario).

 

 Querría evitar que aparezca el mensaje en los casos de Postback (y postback asíncronos de Ajax Request).

Googleando encontré algún fragmento de código, por ejemplo:


if (IsPostBack) { ScriptManager.RegisterClientScriptBlock(this, this.GetType(), Guid.NewGuid().ToString(), "_isPostBack = false;", true); }


Alguna alternativa de código que contemple todos los casos (Postback (y postback asíncronos de Ajax Request) ?

Como añadido, no es posible modificar la ventana (que muestra el navegador) que aparece para onbeforeunload  y onunload por una ventana "custom", no se permite.

Saludos y muchas gracias.

El viernes, 10 de julio de 2015, 13:40:33 (UTC+2), Vicenç Garcia escribió:
Reply all
Reply to author
Forward
0 new messages