Existe uma maneira de executar um código JavaScript final quando um usuário fecha uma janela do navegador ou atualiza a página?
Estou pensando em algo semelhante a onload, mas mais parecido com onclose? Obrigado.
Eu não gosto do método onbeforeunload, que sempre resulta em uma caixa de confirmação aparecendo (sair da página / permanecer no Mozilla) ou (recarregar / não recarregar no Chrome). Existe uma maneira de executar o código silenciosamente?
javascript
browser
Peter
fonte
fonte
Respostas:
Existem ambos
window.onbeforeunload
ewindow.onunload
, que são usados de maneiras diferentes dependendo do navegador. Você pode avaliá-los definindo as propriedades da janela para funções ou usando.addEventListener
:Normalmente,
onbeforeunload
é usado se você precisar impedir o usuário de sair da página (por exemplo, o usuário está trabalhando em alguns dados não salvos, então ele deve salvar antes de sair).onunload
não é compatível com o Opera , até onde eu sei, mas você sempre pode definir ambos.fonte
Ok, encontrei uma solução que funciona para isso, consiste em usar o
beforeunload
evento e depois fazer o handler retornarnull
. Isso executa o código desejado sem que uma caixa de confirmação apareça. É mais ou menos assim:Espero que isto ajude.
fonte
return false;
faz o mesmo (ou seja, impede o comportamento padrão) e é semanticamente mais correto.Às vezes, você pode querer que o servidor saiba que o usuário está saindo da página. Isso é útil, por exemplo, para limpar imagens não salvas armazenadas temporariamente no servidor, para marcar esse usuário como "offline" ou para registrar quando ele termina sua sessão.
Historicamente, você enviaria uma solicitação AJAX na
beforeunload
função, mas isso tem dois problemas. Se você enviar uma solicitação assíncrona, não há garantia de que a solicitação será executada corretamente. Se você enviar uma solicitação síncrona, é mais confiável, mas o navegador travará até que a solicitação seja concluída. Se esta for uma solicitação lenta, isso seria um grande inconveniente para o usuário.Felizmente, agora temos
navigator.sendBeacon()
. Com a utilização dosendBeacon()
método, os dados são transmitidos de forma assíncrona ao servidor web quando o Agente do Usuário tem a oportunidade de fazê-lo, sem atrasar o descarregamento ou afetar o desempenho da próxima navegação. Isso resolve todos os problemas com o envio de dados analíticos: os dados são enviados de maneira confiável, são enviados de forma assíncrona e não afetam o carregamento da próxima página. Aqui está um exemplo de seu uso:sendBeacon()
é compatível com:Atualmente NÃO é compatível com:
Aqui está um polyfill para sendBeacon () caso você precise adicionar suporte para navegadores não suportados. Se o método não estiver disponível no navegador, ele enviará uma solicitação AJAX síncrona.
fonte
http://example.com/script.php?token=something&var1=val1&var2=val2
colocar esses valores em GET.versão jQuery:
Atualização : jQuery 3:
Obrigado garrett
fonte
A documentação aqui encoraja ouvir o evento onbeforeunload e / ou adicionar um ouvinte de evento na janela.
Você também pode simplesmente preencher as propriedades .onunload ou .onbeforeunload da janela com uma função ou uma referência de função.
Embora o comportamento não seja padronizado nos navegadores, a função pode retornar um valor que o navegador exibirá ao confirmar se deve ou não sair da página.
fonte
Você pode usar
window.onbeforeunload
.fonte
O evento é chamado
beforeunload
, então você pode atribuir uma função awindow.onbeforeunload
.fonte
Você pode tentar algo assim:
fonte