Hyperlinks: o atributo target e algumas querelas morais.

Este é o segundo texto tratando sobre os atributos de hyperlinks. Como eu disse no primeiro artigo, vou tratar de todos os atributos não só de forma técnica mas também conceitual. Para este segundo artigo eu quis dedicá-lo exclusivamente ao target blank para me expressar de forma mais clara e expansiva sobre algo que já gerou muita discussão devemos ou não forçar o usuário a abrir links externos em outra janela do browser ou ele deve ter a liberdade de escolher? Eu não vou defender nenhum dos lados aqui, mas pretendo esclarecer detalhes que julgo não terem sido considerados anteriormente.

O atributo target

A função do atributo target () basicamente é indicar o nome de um frame na página onde um documento deve ser aberto. Outro controle que você pode ter com ele é se o hyperlink deve ser aberto na própria janela ou no próprio frame (target:”_self”) onde o próprio link se encontra ou se a URL do link deve ser aberta em outra janela (target=”_blank”) do seu browser. Essa é a única função do atributo target e é basicamente tudo o que precisar saber sobre ele. Veja o exemplo:


<a href="slide.html" target="_self">slide 1.</a>
<a href="slide.html" target="_blank">slide 2.</a>
<a href="slide2.html" target="dynamic">slide 3.</a>
<a href="www.exemplo.com.br" target="miolo">meu amigo.</a>
<a href="www.google.com”  target="miolo">Google</a>

Onde eu posso usar?

Independente deste atributo não ser aceito com o doctype de XHTML strict, somente no transitional e frameset, ele continua fazendo parte da recomendação da W3C. Muitas vezes alguns usuários pedantes que estão começando a aprender alguma coisa torcem o nariz para coisas que continuam sendo recomendação da W3C, como o HTML 4, sem saber muito do que estão falando. Então não se esqueça, o atributo target ainda é uma recomendação da W3C, independente das discussões morais sobre o assunto. Você só não deve usá-lo com o doctype strict de XHTML, mas com o doctype transitional e frameset você pode usar sem culpa. E antes que alguém levante esta questão, doctypes como o “transitional” e o “frameset” são recomendações. Sim, esta discussão vai ficar pra outra oportunidade!

Meu conselho geralmente é que mesmo que você não vai escrever seu site em XHTML strict, faça seu código o mais compatível possível com o XHTML, ou seja, não use o atributo target. Na verdade este é o conselho da W3C. Mas ninguém “peca” em não fazer isso. Ou seja, seu site não vai deixar de ser “semântico” se usar o atributo target, e o Google ou qualquer outro mecanismo de busca não tem preconceito com doctypes, lembre-se disso também. Então não importa o doctype que você usa para os objetivos que te interessa, o que importa é ter um código semântico e sempre limpo.  A idéia de escrever seu código o mais compatível possível com o XHTML é para um futuro que não se pode mensurar quando será, onde tudo o que for compartilhado na web, seja compatível com XML. Mas para reforçar a idéia isso não te impede de usar este atributo se não estiver escrevendo em XHTML Strict.

Outra razão disso começar a cair em desuso é que este atributo, quando não é usado para abrir links em outras janelas, ele é usado  abrir links em frames. Hoje geralmente diversos desenvolvedores ainda utilizam frames ou iframes em determinados lugares para evitar dar refresh na página quando apenas um pequeno conteúdo precisar ser atualizado. Mas soluções que utilizam AJAX para citar um exemplo, conseguem fornecer soluções para isso em determinados contextos. Cada caso é um caso.

Forçando a barra

Mas se você quer forçar com que os links externos no seu site (ou mesmo os internos quando necessário) sejam abertos em outras janelas em um site que tem o doctype de XHTML Strict, eu já escrevi sobre uma solução em JavaScript que faz isso. O Walmar discute em um texto muito interessante aconselhando a não obrigar o usuário a abrir um link em uma nova janela. As as discussões sobre isso são longas. Eu eu não vou dar continuidade nelas. Mas eu defendo a idéia em que haverá contextos em que isso será necessário.

Não confunda comportamento com semântica.

Dezenas de leitores me escreveram e outros comentaram se seria “semântico” em um código escrito em XHTML Strict utilizar um script que o força links serem abertos em outras janelas, considerando que a W3C baniu o atributo target do doctype strict. A questão é todos levantaram essa idéia confundiram “comportamento” com “semântica”. Se você misturar os conceitos, você deve banir a palavra AJAX do seu vocabulário. Por isso não confunda. O fato de utilizar JavaScript para fazer qualquer coisa, seja ela idealizada ou não pela W3C, seja simulando um atributo como o target blank que foi banido no XHTML Strict, ou qualquer outra coisa, não torna seu código nem mais e nem menos semântico. Você só deve se preocupar para que este script não seja obstrusivo. Isso é uma questão de funcionalidade e nada mais. Comportamento e semântica são completamente distintos. Uma coisa não tem nenhuma relação com a outra.

O estudo referenciado pelo Walmar tem todo o sentido e tem seu espaço. Mas não se deve pensar que nunca será necessário simular este comportamento de forçar links a abrir em outra janela mesmo em um mundo digital todo escrito em XHTML Strict. Isso é tão absurdo quanto confundir “comportamento” com “semântica”.

Vá e não peques mais

O que a W3C vem fazendo pensando no futuro é estimular a modularidade, que facilita a vida de todos. Observe o advento do CSS por exemplo, onde tudo que estiver relacionado com apresentação de um site deve estar dentro de uma folha de estilos externa e não mais no código fonte. Depois que o CSS estava relativamente implementado pelos browsers a W3C excluiu a tag <font> do HTML. Ou seja, não significa que você não deve escolher uma fonte para por no seu site, significa que você não deve mais escolhê-la de dentro do código HTML, e sim dentro de uma folha de estilos. A W3C baniu também a tag <i> (itálico). Significa que nunca mais você deve usar qualquer tipo de texto em itálico no seu site porque isso não seria semãntico? Claro que não, agora você deve fazê-lo por CSS. A W3C baniu o atributo target. Significa que agora você nunca mais deve ter controle sobre onde um link deve abrir porque isso seria imoral? Claro que não, só que agora você deve fazer por JavaScript ou qualquer outra coisa que não seja no código fonte e que não seja usando target=”_blank”. Entendeu a lógica? Você não precisa limitar os comportamentos que podem ser agregados ao seu site, só porque não existe uma tag que faça isso ou aquilo automaticamente.

Dependendo do público, forçar com que links sejam abertos em outras janelas será necessário. Pode acreditar nisso. Só quem trabalha em uma agência web onde você constrõe web sites e sistemas web para todos os tipos de usuários sabe disso. A questão é saber usar. Eu pessoalmente evito o máximo que posso, mas haverá circusntãncias em que será preciso trabalhar com este comportamento. Semanas atrás eu bani deste site a solução em JavaScript que forçava os links externos a abrirem em outra janela. A razão disso? Eu simplesmente cansei. Eu acho que o perfil do meu público conhece muito bem o browser que usa e sabe escolher quando quer ou não sair daqui. Não é pelo fato de forçar você quando clicar em link e manter esta janela em que lê este texto aberto, que vai te fazer gostar mais ou menos do meu site, muito menos te ajudar a ficar por aqui mais um pouco. Cabe a você estudar (e não eu) e tentar diagnosticar quando este “comportamento” de abrir links externos em outra janela deverá ser usado. Existem regras semânticas e não regras para comportamentos. Só não confundam isso.