Qual é a melhor maneira de detectar se um usuário sai de uma página da web?
O onunload
evento JavaScript não funciona sempre (a solicitação HTTP leva mais tempo que o necessário para encerrar o navegador).
Criar um provavelmente será bloqueado pelos navegadores atuais.
javascript
ANaimi
fonte
fonte
A Mozilla Developer Network tem uma boa descrição e exemplo de onbeforeunload .
Se você deseja avisar o usuário antes de sair da página, se ela estiver suja (ou seja, se o usuário inseriu alguns dados):
fonte
Aqui está uma solução alternativa: como na maioria dos navegadores, os controles de navegação (a barra de navegação, as guias etc.) estão localizados acima da área de conteúdo da página, você pode detectar o ponteiro do mouse saindo da página pela parte superior e exibir um " antes de sair " diálogo. É completamente discreto e permite que você interaja com o usuário antes que ele efetue a ação para sair.
A desvantagem é que, é claro, é um palpite de que o usuário realmente pretenda sair, mas na grande maioria dos casos está correto.
fonte
Para isso eu estou usando:
É acionado imediatamente antes da página ser descarregada.
fonte
onbeforeunload
?Sei que esta pergunta foi respondida, mas caso você queira acionar algo apenas quando o NAVEGADOR real é fechado, e não apenas quando ocorre um carregamento de página, você pode usar este código:
No meu exemplo, estou limpando o armazenamento local e alertando o usuário com as conexões do mouse e do mouse; somente quando o navegador estiver fechado, isso será ignorado em todas as cargas de página do programa.
fonte
e
variável nesse caso) deve ser usado: stackoverflow.com/questions/9813445/ ...This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user.
developer.mozilla.org/pt-BR/docs/Web/API/Window/eventUma maneira (ligeiramente hacky) de fazer isso é substituir e os links que saem do seu site com uma chamada AJAX para o lado do servidor, indicando que o usuário está saindo, em seguida, use o mesmo bloco javascript para levar o usuário ao site externo solicitou.
É claro que isso não funcionará se o usuário simplesmente fechar a janela do navegador ou digitar um novo URL.
Para contornar isso, você poderia usar o setTimeout () do Javascript na página, fazendo uma chamada AJAX a cada poucos segundos (dependendo da rapidez com que você deseja saber se o usuário saiu).
fonte
Graças ao Service Workers , é possível implementar uma solução semelhante à do Adam puramente no lado do cliente, desde que o navegador a suporte. Apenas evite solicitações de pulsação:
fonte
setInterval(() => fetch('/heartbeat'), 5000)
?No caso de você precisar fazer algum código assíncrono (como enviar uma mensagem ao servidor de que o usuário não está focado na sua página no momento), o evento
beforeunload
não dará tempo para que o código assíncrono seja executado. No caso de assíncrono, descobri que os eventosvisibilitychange
emouseleave
são as melhores opções. Esses eventos são acionados quando o usuário altera a guia, oculta o navegador ou remove o cursor do escopo da janela.fonte
Quanto vale a pena, foi isso que fiz e talvez possa ajudar outras pessoas, mesmo que o artigo seja antigo.
PHP:
JS
Chamada Ajax para activeUser.php
Base de dados:
Basicamente, a cada 5 segundos, os js postam em um arquivo php que rastreia o usuário e o endereço IP dos usuários. Usuários ativos são simplesmente um registro de banco de dados que possui uma atualização para o registro de data e hora do banco de dados em 5 segundos. Usuários antigos param de atualizar para o banco de dados. O endereço IP é usado apenas para garantir que um usuário seja único, para que 2 pessoas no site ao mesmo tempo não se registrem como 1 usuário.
Provavelmente não é a solução mais eficiente, mas faz o trabalho.
fonte