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.

  • http://cirofeitosa.com.br/ Ciro Feitosa

    Henrique,

    Meus parabéns pelos últimos artigos postados. Andei sumido, mas estou na ativa, só que devendo escrever.

    Artigos como esse ajuda a organizar idéias e conceitos que antes estavam meio "soltos" na cabeça de alguns profissionais.

    Grande abraço!

  • Felipe Diesel

    Bom artigo Henrique,

    Esse papo sobre comportamento ser por Javascript faz sentido, nunca tinha pensado desse modo, o complicado disso, na minha opinião é: 1 – Usuários leigos q nem notam q abriu outra janela; e usuários mais experiênctes (eu me acostumei a clicar com a rodinha do mouse em todos os links pra abrir em outra aba e fecho a aba atual…)

    Mas é óbvio que sites "comerciais" será necessário abri em novas janelas, por que você quer prender o usuário…

    Abraço.

  • Pedro Rogério

    Ótimo artigo, com certeza irá abrir a cabeça de muita gente em relação a escrever código semânticamente correto.

  • Henrique Boaventura

    Ainda o grande problema são os leigos.

    O desuso do target é mais um passo na liberdade do usuário em fazer o que quiser no site (aumentar ou diminuir font, atachar novos css, adicionar conteudo). Mas como disseram anteriormente, ninguém nasce sabendo e muitas vezes esse é o público alvo.

  • Alexandre Nunes

    Belo artigo, só uma correção, no último parágrafo você escreveu "circusntãncias" em vez de "circunstâncias".

  • Fellipe Cicconi

    A discussão foi profunda no velho atributo target, hehe, gostei de ler. Sua visão é interessante, Henrique.

    Acho que com o advento da navegação por abas a perspectiva do atributo target mudou na cabeça dos desenvolvedores web. Outro fator crucial foi a morte por heresia de quem usa frames hoje em dia. Essas coisas só se usam em sistemas, segundo muitas pessoas.

    Achei uma boa a W3C tirar da reta o target e jogá-lo para o Javascript, assim, uma coisa não obstrui a outra e vice-versa.

    Valew?!

  • TFox

    Afinal de contas usar frames/iframes é ou não permitido?!

  • Bartus

    Tb acredito que links abrindo em outra janela mais atrapalham do que ajudam, pois mesmo sendo um leigo, sempre existe o botão voltar, e se o teu conteúdo for interessante, com certeza vai ser usado.

    Citando o Walmar: "Ora, se os estudiosos concluíram que isso atrapalha o usuário, é bem mais confiável do que o “achismo” de cada um."

    Concordo que há contextos em que possa ser usado, e ajuda muito, nos caso de exibir detalhes de um produto, ou ampliação de uma imagem. Como pop-up funciona muito bem, mas somente quando o próximo passo do usuário naquela janela for fechá-la.

    Forçar qualquer link a abrir em outra janela cansa, como vc mesmo diz.

  • ygor

    vc explicou do target e tal….porem eu so conhecia o blank….q eh para aparecer em outra pagina mas os outros vc num explikou pra q serve…da uma moral ae…se puder no meu e-mail…..

  • Bartus

    @TFox

    Pq frames/iframes são ruins: http://friendlybit.com/css/frames-or-iframes-with

  • http://woombo.com Tiago Ayer

    Bom, sei que estou comentando o artigo um "bucado" atrasado, mas….

    Acredito que antes de pensarmos em seguir ou nao padroes na web, devemos antes, nos preocupar em sermos os mais profissionais possiveis e cumprirmos nossos prazos.

    Acredito que antes do cliente querer ter um codigo limpo etc e tal, ele quer que o prazo seja cumprimo. Sou um arduoso defensor da semantica, mais acredito que aplica-la 100% em tudo que fazemos hoje em dia seja meio utopico.

    Existem dezenas de servidores, brownsers, sistemas operacionais, etc… todos tentando converger para uma "unica lei" ou melhor, padrao.

    Enquanto isso nao acontece, essa unicidade dos meios, creio que devemos continuar a estudar as melhores praticas e tecnicas e aplica-las qdo possiveis e qdo nao for possivel aplica-las, creio que nao devemos ter medo ou vergonha de usarmos artifios nao semanticos.

    []'s

  • Tatiane

    sou um filhote ainda em html

    e estava loka atras do codigo para a imagem abrir em outra janela

    meu professor falow q isso eu teria q pesquisar

    pq ainda não era hora de aprender!

    hehe

    Valeu

  • Pingback: Doctype - DTD - Document Type Definition » Revolução Etc - Web Standards em uma casca de noz!()

  • Pingback: A "usabilidade" de informar ao usuário que um link é externo ao seu site » Revolução Etc - Web Standards em uma casca de noz!()

  • Bruh

    Ótimo artigo!

    Recentemente decidi que começaria a estudar e utilizar strict e deixei de usar target (um amigo sugeriu que eu utilizasse javascript mas o servidor bloqueou). Estava quieta com o famoso msn aberto, quando um outro rapaz chega inquisitivamente e afirma "Se você quer perder visitantes, continue sem usar target!". Eu expliquei a ele o motivo por não usar mais e ele manteu a afirmativa.

    Após ler este artigo aqui, já não me preocupo mais com perder ou não visitantes. Porque, afinal, é só um blog mesmo…

  • Pingback: Marcos Dell Antonio’s Blog » Blog Archive » Alguém me ajuda: para que servem os hyperlinks?()

  • Pingback: Tiago Celestino .Blog » Utilizando target blank()

  • Gandhi

    Henrique, gosto muito de seus textos em relação à web e penso que você é uma das referências que temos para textos em português, porém esta parte aqui eu tenho que contestar:

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

    Não sei quem foi o brucutú que inventou essa história de que com _blanck se está "forçando" o leitor a ficar mais tempo na página… nada a ver! É uma questão de praticidade. Eu detesto ter que toda a vida clicar com o direito e depois em "abrir em nova aba/janela" só pra abrir o texto em outro lugar. Até porque se alguém quer sair do site, basta fechar a janela…

    É uma questão de praticidade mesmo (para o leitor)… e raro de se encontrar (exceto em sites pornôs).

  • Pingback: Comentários vs Target _blank()

  • Joaby Augusto de Mir

    Olá, gostei bastante do artigo, muito interessante mesmo, mas estou com um problema e gostaria que alguém me ajudasse.

    Eu utilizei botões flash disponíveis no dreamweaver e estou precisando utilizar o target mas nao consigo.

  • Leon Santiago

    opa, escapou um "discução", aí no meio! ;D

  • Pingback: Bookmarks about Acessibilidade()

  • Pingback: A lenda do atributo target | Guilherme Natal Dalsotto - Blog()

  • gadarf

    Nem imaginava que esse atributo era pano pra tanta manga eheheh

  • aprendiz x

    A navegação em uma janela aberta por um link torna-se um círculo vicioso quando esta contem outros links.Isso confunde a cabeça do usuário,que quando se dá conta está navegando em um site com contéudo distinto daquele em que começou .