Redirecionando páginas diretamente no cliente

por Marcos Elias Picão

UPDATE: NÃO FAÇA ISSO!!! Essa dica escrevi quando eu estava começando a mexer com web em 2002/2003, só com hospedagens gratuitas, sem usar PHP/ASP nem .htaccess. Ela é ruim e ainda pode fazer com que seu site seja penalizado nos buscadores - todavia ela é extremamente válida para arquivos HTML locais, como ebooks, manuais, ou outros para serem distribuidos em CDs ou visualização offline. Para sites publicados na web mesmo é bom usar uma indicação de redirecionamento por parte do servidor. Veja como fazer da forma certa: como redirecionar páginas usando PHP e/ou .htaccess.



---------------------------

Este recurso é útil, por exemplo, caso seu site tenha mudado de endereço. No endereço antigo você pode colocar uma mensagem informando da mudança e ao mesmo tempo definir um redirecionamento, que leve o visitante ao novo endereço: se ele não clicar em nada, é levado automaticamente.

Você pode utilizar um método html, aceito na maioria dos navegadores. Veja:

<META HTTP-EQUIV=Refresh CONTENT="3; URL=http://www.viamep.com">

Insira esse código dentro do cabeçalho da página. Em CONTENT=3 quer dizer que 3 segundos após esta página ter sido carregada, a URL definida será aberta. Você pode colocar o nome de um arquivo, não precisa ser necessariamente um endereço completo.

Se preferir utilizar JavaScript, geralmente é executado de forma mais rápida, sem precisar contar determinado número de segundos. Basta colocar na página, de preferência logo no começo:

<script language="JavaScript">
top.location = 'http://www.viamep.com';
</script>

Caso a página esteja num frame, troque 'top' por 'self', para que a nova página seja carregada no mesmo quadro:

<script language="JavaScript">
self.location = 'http://www.viamep.com';
</script>

Se você preferir, da forma mais completa, pode definir top.location.href, em vez de apenas top.location.

Mas não pára por aí... Para redirecionamento o ideal é usar o método "replace" da propriedade "location", do objeto "window". Simples:

<script language="JavaScript">
window.location.replace('http://www.viamep.net');
</script>

Porque esse é o melhor?

- Ao usar o método em HTML, alguns navegadores podem ingorá-lo, e a tela ficar parada.
- Substituir a URL "carregando" outra página, definindo pelo "top.location...", faz com que a página anterior (a que chama o redirecionamento) fique no histórico, e seja acessível portanto pelo botão "Voltar" do navegador. Isso complica para o usuário, que pode clicar em voltar e imediatamente ser remetido à página redirecionada, afinal ao voltar um nível será a página que manda redirecionar que será aberta - e, claro, mandará redirecionar de novo.

Usando o método "replace", a URL atual é "substituída" realmente pela nova, de modo que a página que contém o código do redirecionamento não fique na lista do "Voltar". O endereço, no entanto, será o da página carregada, atualizado automaticamente na barra de endereços.

Pensando nos diferentes navegadores e sistemas operacionais, eu uso três ou quatro métodos:

<META HTTP-EQUIV=Refresh CONTENT="1; URL=pagina.htm">
<script language="JavaScript">
window.location.replace('pagina.htm');
self.location = 'pagina.htm';
</script>
<a href=pagina.htm>Clique aqui</a> se não estiver carregando automaticamente...

O link comum garante o acesso a página caso o navegador seja muito antigo, ou esteja com o JavaScript desativado. Saiba que colocar o tempo "0" (zero) no "meta... refresh" pode fazer com que o redirecionamento seja ignorado pelo navegador.

Uma outra boa situação para aplicar isso é nas pastas do seu site que contém alguns arquivos, mas não uma página inicial. Assim, se alguém entrar na pasta, será redirecionado para outro lugar, em vez de ver uma listagem com os arquivos da pasta (comum na configuração padrão do Apache).