Desenvolvimento

24 ago, 2009

Javascript: Onunload VS Onbeforeunload

Publicidade

Fico pensando em um caso mais familiar possível para ilustrar a
utilidade das duas funções e a melhor que me vem à cabeça é o Gmail. Já
pensou em fazer algo parecido com o Gmail? Quando o usuário fechar a
janela e alguma requisição estiver em processamento, ele dá um aviso
sobre ela, para evitar perda sem necessidade.

Muita gente pensa que o evento utilizado para fazer tal proeza é o
evento “onunload” mas não é. Existe uma pequena diferença entre os dois
eventos.

O evento onunload

O evento onunload em sua tradução quer dizer:
“quando descarregar”. Ele é responsável por executar uma instrução
quando a página for fechada, mas CUIDADO! A utilização deste evento não é muito confiável quando se trata de navegadores
como Internet Explorer e AJAX ao mesmo tempo. O IE às vezes está de mal
humor e simplesmente ignora o evento, não executando a instrução. Se
a instrução envolver AJAX, ela está ainda mais fadada ao fracasso.

Exemplo

<script language="JavaScript">
window.onunload = Sair;
function Sair()
{
    return "A página foi fechada";
}
</script>

O evento onbeforeunload

Traduzindo onbeforeunload para o português, quer dizer: Antes de descarregar. O evento onbeforeunload funciona um pouco diferente do onunload. O evento onbeforeunload
é chamado ANTES de a janela ser fechada. É mais eficiente, pois ele não é
executado em concorrência (junto/ao mesmo tempo) com o fechamento da
janela, o que pode fazer com que algo seja carregado pela metade (de
forma interminada).

Exemplo

<script language="JavaScript">
window.onbeforeunload = ConfirmExit;
function ConfirmExit()
{
//Pode se utilizar um window.confirm aqui também...
return "Mensagem de fechamento de janela....";
}
</script>

Pesquisando sobre este evento eu notei que o jQuery não da suporte ao evento onbeforeunload. Se alguém descobrir por que, ganha um doce. x)

[]’s