Quando queremos abrir um link em uma nova janela, a forma usual é adicionar target="_blank" após o link. Não há problema quando usamos o DOCTYPE transicional (xh tml1-transitional. dtd), mas quando usamos. o DOCTYPE estrito (xhtml1-strict.dtd), este método falhará na verificação do W3C e a seguinte mensagem de erro aparecerá:
"não há destino de atributo para este elemento (nesta versão HTML)"
Acontece que sob o DOCTYPE estrito de HTML4.01/XHTML1.0/XHTML1.1, target="_blank", target="_self" e outras sintaxes são inválidas e só podemos implementá-las por meio de JavaScript.
Um amigo perguntou por que target="_blank" não pode ser usado? Este atributo é muito conveniente. Haha, não sei o que os especialistas do W3C pensam, pelo que eu sei, trata-se principalmente de “facilidade de uso e simpatia”, porque os estrangeiros acham indelicado abrir uma nova janela sem o consentimento do usuário ou instruções claras. de. Independentemente de este cancelamento ser razoável ou não, vejamos a solução.
atributo rel
HTML4.0 adiciona um novo atributo: rel. Este atributo é usado para descrever o relacionamento entre o link e a página que contém o link, bem como o destino do link. rel tem muitos valores de atributos, como próximo, anterior, capítulo, seção, etc. O que queremos usar é o atributo rel="externa l". O código original foi escrito assim:
<a href="document.html" target="_blank"> Abrir uma nova janela</a>
Agora será escrito assim:
<a href="document.html" rel="external">Abrir uma nova janela</a>
Este é um método rigoroso. Claro, deve ser combinado com javascript para ser eficaz.
O código JS completo do javascript é o seguinte:
função links externos() {
if (!document.getElementsByTagName) retornar;
var âncoras = document.getElementsByTagName("a");
for (var i=0; i<âncoras.comprimento; i++) {
var âncora = âncoras[i];
if (anchor.getAttribute("href") &&
âncora.getAttribute("rel") == "externo")
âncora.target = "_blank";
}
}
janela.onload = links externos;
Você pode salvá-lo como um arquivo .js (como external.js) e chamá-lo por meio do método de conexão externa:
<script type="text/javascript" src="external.js"></script>
É isso.
Por fim, gostaria de acrescentar que o target="new" usado pelo meu site é permitido no DOCTYPE transitório, mas não atende ao padrão estrito. Usarei o modo estrito na próxima revisão e alterarei tudo target="new" para rel="external".