window.onbeforeunload no Chrome: qual é a correção mais recente?

Obviamente, o window.onbeforeunload encontrou seu quinhão de problemas com o Chrome, como eu já vi em todos os problemas que encontrei. Qual é o trabalho mais recente?

A única coisa que eu tenho perto de trabalhar é esta :

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

No entanto, se eu replace return “alert” por algo como alert (“blah”), não receberei nada do Chrome.

Eu vi nesta pergunta que o Google propositadamente bloqueia isso. Bom para eles … mas e se eu quiser fazer uma chamada AJAX quando alguém fecha a janela? No meu caso, quero saber quando alguém saiu da sala de chat no meu site, sinalizado pelo fechamento da janela.

Eu quero saber se há uma maneira de
(a): consertar a janela.nem antes da chamada de descarregar para que eu possa colocar o AJAX lá
ou
(b): obter outra maneira de determinar que uma janela foi fechada no Chrome

Responda:

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

Um pouco de mistura e correspondência, mas funcionou para mim. O 1 + 3 garante que a function de logout está sendo chamada (você verá 4 se for bem-sucedido no pop-up quando tentar sair).

Aqui está uma abordagem mais direta.

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

A mensagem retornada pode ser o que você quiser, incluindo a string vazia, se você não tiver nada para adicionar à mensagem que o Chrome já exibe. O resultado é assim:

insira a descrição da imagem aqui

Segundo o MDN ,

A function deve atribuir um valor de string à propriedade returnValue do object Event e retornar a mesma string.

Este é o seguinte

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