2012-03-08 26 views
18

Obviamente, window.onbeforeunload ha encontrado una buena cantidad de problemas con Chrome, como he visto por todos los problemas que he encontrado. ¿Cuál es el trabajo más reciente?window.onbeforeload en Chrome: ¿cuál es la solución más reciente?

Lo único que tengo siquiera cerca de trabajo es this:

window.onbeforeunload = function() { return "alert" }; 

Sin embargo, si sustituyo retorno "alerta" con algo como alert ("bla"), me sale nada de cromo.

Vi en this question que Google lo bloquea a propósito. Bien por ellos ... ¿pero qué sucede si quiero hacer una llamada AJAX cuando alguien cierra la ventana? En mi caso, quiero saber cuándo alguien ha dejado la sala de chat en mi sitio web, señalado por el cierre de la ventana.

quiero saber si hay una manera de cualquiera
(a): fijar la llamada window.onbeforeunload por lo que puedo poner en AJAX no
o
(b): obtener alguna otra forma de determinar que una ventana se ha cerrado en Chrome

+0

Véase también http://stackoverflow.com/questions/7389554/crossbrowser-onbeforeunload – powtac

Respuesta

13

respuesta:

$(window).on('beforeunload', function() { 
    var x =logout(); 
    return x; 
}); 
function logout(){ 
     jQuery.ajax({ 
     }); 
     return 1+3; 
} 

un poco de mezclar y combinar, pero funcionó para mí. El 1 + 3 se asegura de que se llame a la función de cierre de sesión (verá 4 si tiene éxito en la ventana emergente cuando intente salir).

+1

Este trabajo _DOES_ en Chrome para mí. ¡¡¡GRACIAS!!! – jahroy

+1

Esto no funciona en Chrome y también aparecerá una alerta. ¿Hay alguna manera de ignorar la alerta en cromo? – angelokh

+0

¿Qué alerta? Esto funcionó para mí sin ninguna alerta – varatis

3

Aquí hay un enfoque más directo.

$(window).on('beforeunload', function() { 
    return "You should keep this page open."; 
}); 

El mensaje devuelto puede ser cualquier cosa que desee, incluyendo la cadena vacía si no tiene nada que añadir al mensaje que Chrome ya muestra. El resultado es el siguiente:

enter image description here

+5

Intenté lo mismo y no funciona.La alerta aparece correctamente pero sin mi mensaje personalizado. – c4k

+2

@ c4k creo que algo en la última actualización de Chrome rompió esto. En mi caso, el mensaje personalizado devuelto estaba funcionando hace una semana, pero después de que se instaló un parche de Chrome, ya no funciona. – Chronozoa

+4

@Chronozoa, tiene razón: https://www.chromestatus.com/feature/5349061406228480 – Bobort

2

Según MDN,

La función debe asignar un valor de cadena a la propiedad returnValue del objeto de evento y devolver la misma cadena.

Este es el siguiente

window.addEventListener('beforeunload', function(ev) { 
    return ev.returnValue = 'My reason'; 
}) 
+0

Esta es la idea correcta, pero olvidó agregar el evento 'beforeunload' al oyente. – zenw0lf

+0

Gracias, lo actualicé – kisp

+0

¡Muchas gracias! Esto funcionó en Chrome 63; devolver la cadena sin asignar 'returnValue' no fue suficiente. – cxw

Cuestiones relacionadas