¿Por qué no funcionan los elementos de escritura de cierre automático?

Cuál es la razón por la que los navegadores no reconocen correctamente:

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

Sólo se reconoce esto:

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

¿Rompe esto el concepto de soporte XHTML?

Nota: Esta afirmación es correcta al menos para todo IE (6-8 beta 2).

Solución

La especificación XHTML 1 dice:

С.3. Minimización de elementos y contenido de elementos vacíos

Dada una instancia vacía de un elemento cuyo modelo de contenido no es EMPTY (por ejemplo, un título o párrafo vacío) no utilice la forma minimizada (por ejemplo, utilice <p> </p> y no <p />).

La DTD de XHTML especifica los elementos script como:


Comentarios (10)

Internet Explorer 8 y anteriores no admiten el análisis sintáctico de XHTML. Incluso si utiliza una declaración XML y/o un doctype XHTML, el antiguo IE sigue analizando el documento como HTML plano. Y en HTML plano, la sintaxis de autocierre no es compatible. La barra diagonal final se ignora, hay que usar una etiqueta de cierre explícita.

Incluso los navegadores con soporte para el análisis de XHTML, como IE 9 y posteriores, seguirán analizando el documento como HTML a menos que se sirva el documento con un tipo de contenido XML. Pero en ese caso, el viejo IE no mostrará el documento en absoluto.

Comentarios (3)

A diferencia de XML y XHTML, HTML no conoce la sintaxis de autocierre. Los navegadores que interpretan XHTML como HTML no saben que el carácter / indica que la etiqueta debe cerrarse automáticamente; en su lugar, lo interpretan como un atributo vacío y el analizador sintáctico sigue pensando que la etiqueta está 'abierta'.

Así como <script defer> se trata como <script defer="defer">, <script /> se trata como <script /="/">.

Comentarios (3)