Por que não't os elementos do script de auto-fechamento funcionam?

Qual é a razão pela qual os navegadores não reconhecem corretamente:

<script src="foobar.js" /> <!-- self-closing script element -->

Só isto é reconhecido:

<script src="foobar.js"></script>

Isso quebra o conceito de suporte a XHTML?

Nota: Esta declaração está correcta pelo menos para todo o IE (6-8 beta 2).

Solução

A especificação XHTML 1 diz:

С.3. Elemento Minimização e Conteúdo de Elemento Vazio

Dada uma instância vazia de um elemento cujo modelo de conteúdo não é EMPTY (por exemplo, um título ou parágrafo vazio), não utilize a forma minimizada (por exemplo, utilize <p> </p> e não <p />).

XHTML DTD especifica os elementos do script como:


Comentários (10)

Internet Explorer 8 e anteriores não suportam a análise de XHTML. Mesmo que você use uma declaração XML e/ou um doctype XHTML, o antigo IE ainda analisa o documento como HTML simples. E em HTML simples, a sintaxe de auto-fechamento não é suportada. A barra de corte é simplesmente ignorada, você tem que usar uma tag de fechamento explícita.

Mesmo navegadores com suporte à análise de XHTML, como IE 9 e posteriores, ainda analisarão o documento como HTML, a menos que você o sirva com um tipo de conteúdo XML. Mas nesse caso, o IE antigo não exibirá o documento de forma alguma!

Comentários (3)

Ao contrário do XML e XHTML, o HTML não tem conhecimento da sintaxe de auto-fechamento. Navegadores que interpretam XHTML como HTML não sabem que o caracter `/' indica que a tag deve ser de auto-fechamento; em vez disso interpretam-na como um atributo vazio e o analisador ainda pensa que a tag está 'aberta'.

Assim como <script defer> é tratado como <script defer="defer">, <script /> é tratado como <script /="/">.

Comentários (3)