Quelle est la raison pour laquelle les navigateurs ne reconnaissent pas correctement :
<script src="foobar.js" /> <!-- self-closing script element -->
Seul ceci est reconnu :
<script src="foobar.js"></script>
Cela rompt-il le concept de support XHTML ?
Note : Cette affirmation est correcte au moins pour tous les IE (6-8 beta 2).
La spécification XHTML 1 dit :
[С.3. minimisation des éléments et contenu des éléments vides] (http://www.w3.org/TR/xhtml1/#C_3)
Étant donné une instance vide d'un élément dont le modèle de contenu n'est pas
EMPTY
(par exemple, un titre ou un paragraphe vide), n'utilisez pas la forme minimisée (par exemple, utilisez<p> </p>
et non<p />
).
La [DTD XHTML] (http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_XHTML-1.0-Strict) spécifie que les éléments de script sont :
<!-- script statements, which may include CDATA sections -->
<!ELEMENT script (#PCDATA)>
Internet Explorer 8 et les versions antérieures ne prennent pas en charge l'analyse syntaxique XHTML. Même si vous utilisez une déclaration XML et/ou un doctype XHTML, l'ancien IE analyse toujours le document comme du HTML ordinaire. Et en HTML simple, la syntaxe de fermeture automatique n'est pas prise en charge. La barre oblique de fin est simplement ignorée, vous devez utiliser une balise de fermeture explicite.
Même les navigateurs prenant en charge l'analyse XHTML, tels que [IE 9 et versions ultérieures] (http://blogs.msdn.com/b/ie/archive/2010/11/01/xhtml-in-ie9.aspx), analyseront toujours le document comme du HTML, à moins que vous ne serviez le document avec un type de contenu XML. Mais dans ce cas, l'ancien IE n'affichera pas du tout le document !
Contrairement à XML et XHTML, HTML ne connaît pas la syntaxe de fermeture automatique. Les navigateurs qui interprètent le XHTML comme du HTML ne savent pas que le caractère /
indique que la balise doit être auto-fermante ; ils l'interprètent comme un attribut vide et l'analyseur pense toujours que la balise est "ouverte".
Tout comme <script defer>
est traité comme <script defer="defer">
, <script />
est traité comme <script /="/">
.