(Quase) Nada de links abrindo em outra janela!
Recentemente rolou na Blogosfera uma discussão sobre links, se devem ou não e quando devem ser abertos em novas janelas.
As soluções apresentadas foram várias, mas nenhuma me satisfez. Eis aqui todas elas e no final a minha própria solução:
O bom e velho target=_blank
Essa solução é a mais simples, você escolhe os links que quer abrir em novas janelas adicionando o atributo target com valor _blank ao elemento do link.
É uma solução incorreta, porque o atributo target é depreciado por não ser semântico.
O novo rel=external
A solução mais correta é o atributo rel com valor external. Semanticamente ele mostra que seu link não é interno no site, ou seja, aponta para um domínio de fora.
Infelizmente os navegadores não lêem que isso deve ser aberto em uma nova janela, o que acaba tornando necessário um script para fazer a mágica:
function externalLinks() {
if (!document.getElementsByTagName) return;
var anchors = document.getElementsByTagName("a");
for (var i=0; i<anchors.length; i++) {
var anchor = anchors[i];
if (anchor.getAttribute(”href”) &&
anchor.getAttribute(”rel”) == “external”)
anchor.target = “_blank”;
}
}
window.onload = externalLinks;
O Último Problema e a Última solução
Com as duas técnicas acima, qualquer usuário que entrar na sua página abrirá os links externos em uma nova janela, ele não terá opção de escolha.
O ato de abrir em uma nova janela é mais comum a pessoas que fazem pesquisa e não leitura, e geralmente usuários avançados não gostam que o site abra automaticamente em uma nova janela.
Pra evitar isso, o correto seria fazer com que links contento rel=external abrissem novas janelas somente quando o usuário viesse de algum sistema de busca.
O script em PHP à seguir identifica quando um usuário vem do Google ou Yahoo e somente ativa a abertura de novas janelas para esses visitantes:
<?php
if (stristr(getenv('HTTP_REFERER'),"google")||stristr(getenv('HTTP_REFERER'),"yahoo")) {
echo <<<extlinks
<script type="text/javascript"><!--
function externalLinks() {
if (!document.getElementsByTagName) return;
var anchors = document.getElementsByTagName("a");
for (var i=0; i<anchors.length; i++) {
var anchor = anchors[i];
if (anchor.getAttribute(”href”) &&
anchor.getAttribute(”rel”) == “external”)
anchor.target = “_blank”;
}
}
window.onload = externalLinks;
</script>
extlinks;
}
?>
Se você tem WordPress, pra implantar essa solução, basta copiar o código acima e incluir no template Header, logo acima do fim da tag </head>. Se alguém souber fazer um plugin pra isso (eu não sei) eu gentilmente coloco o link e créditos aqui
Fácil né?


26/4/2007 às 6:04 am
que horror! todo esse trabalho, todo esse javascript e php e tudo que o usuário quer é ele mesmo decidir onde abre o que!
26/4/2007 às 6:27 am
Acho que não é nada viável alterar o comportamento dos links, isso pode gerar confusão quando ele voltar ao site diretamente, já da pra imaginar…
Para mim, o ideal é mostrar ao usuário se aquele é um link externo ou não, e ele decide oq fazer, assim como na wikipedia, revolucao.etc.br e outros que estão adotando aquela setinha azul para os links externos, se todo mundo começar a usar, o usuário leigo vai aprender, e tudo se resolve. (que sonho…)
26/4/2007 às 8:56 am
Legal essa idéia, mas mesmo não sendo muito semântico continuo usando o target, pois o rel não funciona mesmo, tem que ficar fazendo gambiarra… ai é complicado.
Valew pelas dicas
26/4/2007 às 9:44 am
Concordo com o Aguinelo nessa.
Mas uma dúvida: se o target não é semântico, ele deveria não ser aceito pela W3C? Se eles não recomendam, o que eles recomendam para abrir-se links em novas janelas?
Abraços
26/4/2007 às 11:13 am
Osias: Pois é! A grande dúvida é se o usuário sabe abrir links em novas janelas. Aqui eu prefiro deixar tudo abrindo na mesma janela, já que a maioria dos visitantes tem conhecimento técnico suficiente pra saber isso.
Canha, o W3C não recomenda a abertura de links em novas janelas!
Nem todo dispositivo funciona com janelas e isso perderia o sentido do atributo.
Luan, concordo contigo sobre usuários leitos. O propósito da setinha é diferente desse script que fiz. Inclusive você pode usar ambos ao mesmo tempo. O meu apenas cria links externos quando o visitante vem do Google e Yahoo, a setinha poderia ser mostrada pra eles sem problemas
17/5/2007 às 5:03 pm
[...] (Quase) Nada de links abrindo em outra janela! [...]
6/7/2007 às 5:46 pm
Basta apenas inserir: antes da tag e pronto! Simples assim!
Embora agora eu não esteja mais usando essa forma, havia funcionado muito bem para mim! Fazia abrir suas páginas internas, categorias, arquivos…tudo em outra janela..
24/10/2007 às 8:43 pm
Achei bem legal a criação deste blog.