Acorda pra Web!

Tecnologia que vai mudar nossas vidas, depois do café.

(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é?

8 Respostas para “(Quase) Nada de links abrindo em outra janela!”

  1. Osias diz:

    que horror! todo esse trabalho, todo esse javascript e php e tudo que o usuário quer é ele mesmo decidir onde abre o que!

  2. Luan Almeida diz:

    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…)

  3. Aguinelo Pedroso diz:

    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

  4. Canha diz:

    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

  5. Alexandre diz:

    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 :)

  6. Tiago Celestino .Blog » Utilizando target blank diz:

    [...] (Quase) Nada de links abrindo em outra janela! [...]

  7. Ester Beatriz diz:

    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..

  8. fabiana diz:

    Achei bem legal a criação deste blog.

Deixar um Comentário

XHTML: Você pode usar essas tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>