Posts Categorizados ‘jquery

30
Jan
09

Solução para detectar fechamento do browser (navegador) ou F5 (refresh)

Primeiramente, a intenção desse título gigante é pra facilitar a quem procurou por essa solução a um tempão e nunca achou. Eu sou um deles! :) . Isso não é do outro mundo, qualquer um poderia ter feito ou até já fez, mas não disponibilizou.

Bom tarde a todos! Pensando a gente sempre chega lá! Hoje pela manhã resolvi tentar solucionar a grande dificuldade que temos em detectar quando o usuário fechar o browser realmente ou se deu F5! Bom, acredito que tenha solucionado!!

Inicialmente eu tentei atribuir um atributo ao <body> com a função onunload=”". Isso foi o primeiro pensamento e lógico, completamente incompleto! Depois de muita caducada cheguei a seguinte solução:

Bibliotecas utilizadas:

- jQuery (Não é obrigatório, pode ser qualquer uma.)

- shortcut.js

Explicação:

  1. Ao carregar a página, atribuimos o atributo ou você pode deixar já no html a função onunload=”" na tag <body>. Eu prefiro atribuir através de alguma biblioteca. (Eu utilizei jQuery).
  2. Atruímos a tecla “F5″ além de sua ação nativa a remoção do atributo onunload=”" da tag <body>. Fazendo isso, evitamos que a ação de fechar do browser seja executada também quando atualizarmos a página. Este é o grande vilão do problema do onunload.
  3. A todos os links, precisamos atribuir também a remoção do onunload=”" da tag <body>, pois, quando clicamos em algum link damos refresh na página, e seguindo a mesma lógica do F5, precisamos retirar também a função do onunload=”".
  4. É isso! Nada mais. Agora vamos ao código:

Javascript:

Entende-se que você saiba carregar a biblioteca jquery e o arquivo shortcut.js. :)

  1. $(document).ready(function(){
  2. $(‘body’).attr(‘onunload’,”alert(‘FECHAMENTO DE PÁGINA’);”)
  3. $(‘a’).click(function()
  4. {
  5. $(‘body’).removeAttr(‘onunload’,”);
  6. });
  7. });
  8. shortcut.add(“F5″,function()
  9. {
  10. $(‘body’).removeAttr(‘onunload’,”);
  11. history.go(0); //Havia pensando em location.href=”, porém teriamos que passar a página. Um amigo sugeriu uma melhor solução, que é essa. by Luiz Tiago
  12. return false;
  13. });

Considerações:

Como eu havia falado, pode não ser a melhor solução, porém, funcionou para mim. Testei em: Firefox/Chrome/IE. Espero ter ajudado ao pessoal. Me surgiu uma dúvida, porém não tive oportunidade de testar ainda com formulários, quem tiver afim de testar e comentar pra melhorarmos a solução, estamos ae.

That’s all Folks.

Djalma Araújo

www.djalmaaraujo.com.br




Twitter

  • RT @Farique1: Ser bruto é: Comer picanha gelada com vinagrete numa segunda à noite. 13 hours ago
  • RT @aline_lira: Segunda-feira é o pior dia da semana, definitivamente. Fã de Garfield: hate mondays! 13 hours ago
  • Curso de PHP - Frameworks. Conceitos, Técnicas, e muita prática com alguns frameworks mais utilizados no mercado. Interesses? reply-me! 16 hours ago
  • Me acostumando ao js oop. 21 hours ago
  • RT @juliogreff: pessoal, fecharemos a versão 0.2 do #spaghettiphp ao meio dia. se você tem um bug ou alteração necessária, agra é a hr! #EBA 23 hours ago

Assinem meu feed

Assine também via e-mail

del.icio.us

My Flickr

Espaço relax

Coisas.

stuart little.

More Photos

Navegue