Alguma vez você já se perguntou por que usamos o underscore em valores como _blank, _self, etc...? Eu não sabia até ler esse post do Kyrylo Silin.

Um pouco de história

Antes do surgimento do HTML5, abusávamos do uso de frames para construção de páginas. Essas páginas eram criadas baseadas em framesets. Eu mesmo escrevi muito código HTML utilizando frames. Como nem tudo são flores, usar frames para construção de páginas podia ser útil para organizar conteúdo em várias janelas na própria página (SPA, alguém aí? 😅), mas os frames eram difíceis de manter e tinham sérios problemas de segurança.

Como funcionavam os framesets

Cada frame continha um nome único. Algo como name="footer", name="content", name="sidebar". E quando precisávamos abrir um link em um frame específico, informávamos qual o name do frame onde o conteúdo do link seria carregado. Por exemplo: <a href="/sobre-mim.html" target="content">Sobre mim</a>.

Ao clicar no link, a página "sobre-mim.html" era carregada no frame nomeado "content". Agora, imagine se houvesse um link assim: <a href="/outra-pagina.html" target="blank">Outra página</a>. O que aconteceria?

Como expliquei anteriormente, ao informar target="blank", o link teria que ser aberto em um frame nomeado como "blank", mas caso esse frame não existisse, por padrão, o navegador criava uma nova janela identificando-a como "blank". O mais estranho é que ao clicar no mesmo link novamente, o navegador não abria uma nova janela. 🫣

A solução com underscore

Ao usar o underscore, o navegador passou a entender que o valor target="_blank" não era um nome de um frame na tela, mas sim um valor especial, compreendendo que o conteúdo do link deveria ser aberto em uma nova janela/aba. Esse comportamento também se aplica para os valores target="_self", target="_parent" e target="_top".

Relevância hoje

Mesmo com a obsolescência dos framesets com o surgimento do HTML5, esses valores especiais foram preservados na especificação. Hoje, quando usamos target="_blank", continuamos aproveitando essa convenção estabelecida há décadas, mas com propósitos modernos de navegação.

Simples, porém eficiente, não é mesmo!? 😎