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).
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:
<!-- script statements, which may include CDATA sections -->
<!ELEMENT script (#PCDATA)>
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!
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 /="/">
.