Hallo,
Auffällig ist in diesem Zusammenhang auch Firefox’ eigene Quelltextansicht; hier ist aus irgendeinem Grund das Syntaxhighlighting nach dem ersten script-Element fehlerhaft, als wäre dieses Element nie geschlossen worden.
<tag /> wird von Geckos Tag-Soup-Parser als bloßer Start-Tag behandelt. Das »/« wird einfach als irgendwelcher unidentifizierbarer Müll im Tag angesehen.
Beispiel:
<body>
<div />
<div />
</body>
wird behandelt wie
<body>
<div>
<div>
</body>
Das wird dank der Fehlerkorrektur zu
<body>
<div>
<div>
</div></div>
</body>
Und der DOM-Baum ist entsprechend
body
\ div
\ div
und nicht etwa
body
\ div
\ div
Wenn du nun schreibst:
<script type="text/javascript" src="foo.js" />
alert("inline");
</script>
wird das ganze im Gecko so behandelt
<script type="text/javascript" src="foo.js">
alert("inline");
</script>
und das wird zu
<script type="text/javascript" src="foo.js"></script>
weil Code in script ignoriert wird, wenn ein src-Attribut vorhanden ist.
Bekanntlich kann durch eine Sonderregelung im HTML-4-Standard in script jeglicher Code auftauchen, erst bei »</« wird das Element beendet. Aus HTML-Sicht ist es also möglich, in script alle möglichen Start-Tags unterzubringen, ohne dass sie vom Parser als solche beachtet werden.
<script type="text/javascript" src="1.js">
<script type="text/javascript" src="2.js">
<script type="text/javascript" src="3.js">
</script>
ist aus HTML-Sicht ein Script-Element mit dem Textinhalt »<script type="text/javascript" src="2.js"><script type="text/javascript" src="3.js">«. Das ist wegen dem src-Attribut äquivalent zu
<script type="text/javascript" src="1.js"></script>
So erklärt sich das Verhalten. Ist doch ganz logisch. ;) Man muss sich bloß davor hüten, anzunehmen, XHTML-als-text/html würde in irgendeiner Weise nach festgelegten Regeln verarbeitet. Nein, der Browser rät gänzlich ohne Beachtung des Doctypes herum.
Mathias