Inhalt von Script- und Style-Bereichen
Giovanni
- xml
Hallo,
lese gerade in SelfHTML ein Kapitel über XHTML, doch leider kapiere ich hier was nicht:
http://selfhtml.teamone.de/html/xhtml/unterschiede.htm#script_style
Um das Problem zu lösen, können Sie den Script-Bereich selber als "CDATA"-Bereich erzwingen. Dazu müssen Sie eine entsprechende XML-typische Notation anwenden. Damit ist das Problem allerdings nur für XML-Parser gelöst. (Bis dahin okay) Normale JavaScript-Interpreter etwa meinen, es bei der Syntax mit JavaScript zu tun zu haben und erzeugen einen Fehler, weil es sich nicht um gültiges JavaScript handelt. In diesem Fall bleibt nur, das Script in eine externe Datei auszulagern. (Wo soll jetzt der Fehler sein?)
<script type="text/javascript">
<!--
<![CDATA[
/* JavaScript-Kommentar: jetzt folgt ein kleines Script */
if(parseInt(navigator.appVersion) < 4)
alert("Oh, ein sehr alter Browser");
/* und damit ist das Script auch schon zu ende */
]]>
//-->
</script>
Ein JS-Interpreter ist doch in jedem Browser drin, oder?
Hi,
Normale JavaScript-Interpreter etwa meinen, es bei der Syntax mit JavaScript zu tun zu haben und erzeugen einen Fehler, weil es sich nicht um gültiges JavaScript handelt. In diesem Fall bleibt nur, das Script in eine externe Datei auszulagern. (Wo soll jetzt der Fehler sein?)
Ein JS-Interpreter ist doch in jedem Browser drin, oder?
nicht in jedem, nein. Das Problem, das hier angesprochen wird, hat aber nichts mit der Existenz eines Interpreters zu tun, sondern damit, dass dieser versuchen wird, "<![CDATA[" und "]]>" als JavaScript-Befehle zu interpretieren.
Cheatah
D. h. in einem XHTML Dokument kann ich JS nur dann verwenden, wenn ich es aus einer externen Datei einbinde, oder?
Das würde sich aber nicht nur auf JS beschränken, sonern auch auf andere Sprachen z. B. PHP in denen < oder > vorkommt, oder?
Wenn das so ist, wie binde ich eine externe Datei Datei mit XHTML ein? Mit PHP ist das easy, include, aber HTML, wie soll das gehen?
Danke für die Hilfe
Gruß Giovanni
Hi,
D. h. in einem XHTML Dokument kann ich JS nur dann verwenden, wenn ich es aus einer externen Datei einbinde, oder?
nö, Du kannst auch den JavaScript-Code XML-kodieren.
Das würde sich aber nicht nur auf JS beschränken, sonern auch auf andere Sprachen z. B. PHP in denen < oder > vorkommt, oder?
Serverseitige Sprachen landen nicht beim Client. Es ist völlig unerheblich (bzw. unbekannt), ob das Ergebnis HTML, XHTML, XML, CSV, Java, Flash oder sonstwas ist. _Vor_ der Erzeugung eines (z.B.) XML-Codes ist daher natürlich auch eine XML-Kodierung nicht notwendig - oder genauer gesagt: nicht korrekt.
Wenn das so ist, wie binde ich eine externe Datei Datei mit XHTML ein?
"Im Prinzip" gar nicht. Im Einzelfall mag etwas vorgesehen sein, wie z.B. <script src>, aber eine Pauschallösung existiert nicht.
Cheatah
Hallo, also erstmal danke für die Antwort.
nö, Du kannst auch den JavaScript-Code XML-kodieren.
Ich schreibe also für < > und so:
< <
& &
"
'
Also versteht JS lt; oder > und bringt kein Fehler! Ist das so schon richtig?
Serverseitige Sprachen landen nicht beim Client. Es ist völlig »» unerheblich (bzw. unbekannt), ob das Ergebnis HTML, XHTML, XML, CSV, Java, Flash oder sonstwas ist. _Vor_ der Erzeugung eines (z.B.) XML-Codes ist daher natürlich auch eine XML-Kodierung nicht notwendig - »» oder genauer gesagt: nicht korrekt.
Das heißt also, dass der PHP-Code einfach nur in den XML Code bereits auf dem Server interpretiert wird, und nicht der XML Code, dadurch stört im PHP das > oder < nicht. Während JS clientseitig läuft. Oder?
Hi,
Also versteht JS lt; oder > und bringt kein Fehler! Ist das so schon richtig?
nicht ganz :-) Der JavaScript-Interpreter bekommt das Ergebnis der HTML/XHTML/XML-Dekodierung zu futtern, ergo kriegt er das gar nicht mit. Es ist genau wie bei Parametern in Link-URLs: Die müssen(!) ebenfalls kodiert werden, was dekodiert wird, bevor es als URL interpretiert werden kann.
Das heißt also, dass der PHP-Code einfach nur in den XML Code bereits auf dem Server interpretiert wird, und nicht der XML Code, dadurch stört im PHP das > oder < nicht. Während JS clientseitig läuft. Oder?
Korrekt. Du siehst es, wenn Du Dir in Deinem Browser (oder mit einem beliebigen Client, z.B. dem W3C-Validator) mal den Quellcode ansiehst.
Cheatah
Hi,
Also versteht JS lt; oder > und bringt kein Fehler! Ist das so schon richtig?
nicht ganz :-) Der JavaScript-Interpreter bekommt das Ergebnis der HTML/XHTML/XML-Dekodierung zu futtern, ergo kriegt er das gar nicht mit. Es ist genau wie bei Parametern in Link-URLs: Die müssen(!) ebenfalls kodiert werden, was dekodiert wird, bevor es als URL interpretiert werden kann.
Könntest du mir vielleicht ein kleines Beispiel dazu machen, wenns dir nichts ausmacht?
Hi,
nicht ganz :-) Der JavaScript-Interpreter bekommt das Ergebnis der HTML/XHTML/XML-Dekodierung zu futtern, ergo kriegt er das gar nicht mit. Es ist genau wie bei Parametern in Link-URLs: Die müssen(!) ebenfalls kodiert werden, was dekodiert wird, bevor es als URL interpretiert werden kann.
Könntest du mir vielleicht ein kleines Beispiel dazu machen, wenns dir nichts ausmacht?
Beispiel für was? Für die Kodierung eines "&"-Zeichens? :-)
Cheatah
Hi,
Das würde sich aber nicht nur auf JS beschränken, sonern auch auf andere Sprachen z. B. PHP in denen < oder > vorkommt, oder?
1. Solange da noch PHP-Zeug drin steht, ist ja noch gar kein XHTML-Dokument vorhanden - dieses wird ja erst vom PHP-Interpreter erzeugt - und im erzeugten Dokument ist vom PHP nichts mehr zu sehen.
2. PHP verwendet ja nicht < und > sondern <? und ?> als Begrenzer. Diese sind zufällig auch die Begrenzer für XML Processing instructions, also ziemlich unproblematisch, solange sie nicht innerhalb anderer Tags (NICHT: Elemente!) vorkommen.
Wenn das so ist, wie binde ich eine externe Datei Datei mit XHTML ein? Mit PHP ist das easy, include, aber HTML, wie soll das gehen?
Warum willst Du das per HTML machen? Vor dem PHP-Interpreter hast Du ein PHP-Script und kein XHTML-Dokument, erst nach dem PHP-Interpreter hast Du ein php-script-freies XHTML-Dokument (oder auch nicht, wenn der Output nicht valide ist...)
cu,
Andreas