Tentando detectar o evento de fechamento do navegador

Eu tentei muitos methods para detectar o evento perto do navegador através de jQuery ou JavaScript. Mas, infelizmente, não consegui detectar o fechamento. Os methods onbeforeunload e onunload também não estão funcionando.

Como faço para detectar a janela close , unload ou beforeunload unload events?

Você já tentou esse código?

 window.onbeforeunload = function (event) { var message = 'Important: Please click on \'Save\' button to leave this page.'; if (typeof event == 'undefined') { event = window.event; } if (event) { event.returnValue = message; } return message; }; $(function () { $("a").not('#lnkLogOut').click(function () { window.onbeforeunload = null; }); $(".btn").click(function () { window.onbeforeunload = null; }); }); 

A segunda function é opcional para evitar a solicitação ao clicar nos elementos .btn e .btn .

Mais uma coisa, o prompt personalizado não funcionará no Firefox (mesmo na versão mais recente também). Para mais detalhes sobre isso, por favor, vá para este tópico.

Referindo-se a vários artigos e fazendo alguns testes de tentativa e erro, finalmente desenvolvi essa idéia que funciona perfeitamente para mim.

A ideia era detectar o evento unload que é acionado ao fechar o navegador. Nesse caso, o mouse estará fora da janela, apontando para o botão fechar (‘X’) .

 $(window).on('mouseover', (function () { window.onbeforeunload = null; })); $(window).on('mouseout', (function () { window.onbeforeunload = ConfirmLeave; })); function ConfirmLeave() { return ""; } var prevKey=""; $(document).keydown(function (e) { if (e.key=="F5") { window.onbeforeunload = ConfirmLeave; } else if (e.key.toUpperCase() == "W" && prevKey == "CONTROL") { window.onbeforeunload = ConfirmLeave; } else if (e.key.toUpperCase() == "R" && prevKey == "CONTROL") { window.onbeforeunload = ConfirmLeave; } else if (e.key.toUpperCase() == "F4" && (prevKey == "ALT" || prevKey == "CONTROL")) { window.onbeforeunload = ConfirmLeave; } prevKey = e.key.toUpperCase(); }); 

A function ConfirmLeave fornecerá a mensagem padrão pop-up, caso haja necessidade de personalizar a mensagem e, em seguida, retornará o texto a ser exibido em vez de uma sequência vazia na function ConfirmLeave () .

Tente seguir o código funciona para mim no ambiente Chrome chrome. Antes de executar, verifique se a jquery está anexada ao documento.

 $(document).ready(function() { $(window).bind("beforeunload", function() { return confirm("Do you really want to close?"); }); }); 

Para simples siga os seguintes passos:

  1. aberto http://jsfiddle.net/
  2. insira algo em html, css ou checkbox de javascript
  3. tente fechar a guia no chrome

Deve mostrar a seguinte imagem:

insira a descrição da imagem aqui

O script a seguir dará uma mensagem no Chrome e no IE:

  

cromada
insira a descrição da imagem aqui

IE
insira a descrição da imagem aqui

no Firefox você receberá mensagem genérica

insira a descrição da imagem aqui

O mecanismo é síncrono, portanto nenhuma chamada do servidor para atrasar funcionará, você ainda pode preparar um mecanismo como a janela modal que é mostrada se o usuário decidir ficar na página, mas não há como impedi-lo de sair.

Resposta à pergunta no comentário

F5 irá triggersr o evento novamente, assim será Atl + F4 .

Como o Phoenix disse, use o método jQuery .bind, mas para maior compatibilidade do navegador você deve retornar um String,

 $(document).ready(function() { $(window).bind("beforeunload", function() { return "Do you really want to close?"; }); }); 

mais detalhes podem ser encontrados em: developer.mozilla.org

Oi eu tenho uma solução complicada, que funciona apenas em novos navegadores:

basta abrir um websocket para o seu servidor, quando o usuário fechar a janela, o evento onclose será acionado

Talvez seja melhor usar o caminho para detectar o mouse.

No BrowserClosureNotice você tem um exemplo de demonstração e uma biblioteca javascript pura para fazer isso.

Não é perfeito, mas evite problemas de documentos ou events de mouse …

  

Por favor, tente este código, isso está funcionando bem para mim. Esta mensagem personalizada está entrando no navegador Chrome, mas no Mozilla esta mensagem não está sendo exibida.

       

Isso é usado para quando o usuário logado fechar o navegador ou a aba do navegador ele irá automaticamente sair da conta do usuário …

Você pode tentar algo assim.

   test       

Quando o usuário fecha a janela, o retorno de chamada será acionado.