change beforeunload javascript onbeforeunload window.onunload

javascript - change - window.onbeforeunload en Chrome: ¿cuál es la solución más reciente?



window onbeforeunload change text (4)

A partir del 69.0.3497.92, Chrome no ha cumplido con el estándar. Sin embargo, se ha archivado un informe de error y se está realizando una review .

  • Chrome requiere que el valor de retorno se establezca por referencia al objeto de evento, no al valor devuelto por el controlador.
  • El estándar establece que se puede controlar la solicitud cancelando el evento o estableciendo el valor de retorno en un valor no nulo .
  • El estándar establece que los autores deben usar Event.preventDefault () en lugar de returnValue.
  • El estándar establece que el mensaje que se muestra al usuario no es personalizable.

window.addEventListener(''beforeunload'', function (e) { // Cancel the event as stated by the standard. e.preventDefault(); // Chrome requires returnValue to be set. e.returnValue = ''''; }); window.location = ''about:blank'';

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

Lo único que tengo cerca de trabajar es this :

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

Sin embargo, si sustituyo return "alerta" con algo como alerta ("blah"), no obtengo nada de Chrome.

Vi en esta pregunta que Google bloquea esto a propósito. Bien por ellos ... pero ¿qué pasa 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): arregle la ventana. en antes de descargar la llamada para que pueda poner AJAX allí
o
(b): obtenga otra forma de determinar que una ventana se ha cerrado en Chrome


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, incluida la cadena vacía si no tiene nada que agregar al mensaje que ya muestra Chrome. El resultado se ve así:


Responder:

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

Un poco de mezcla y partido, pero funcionó para mí. El 1 + 3 se asegura de que se esté llamando a la función de cierre de sesión (verá 4 si tiene éxito en la ventana emergente cuando intenta irse).


Según MDN ,

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

Este es el siguiente

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