Datenschutzerklärung

Quelltext in javascript wird nicht richtig erkannt

Validome - Forum

Startseite Validome
RSS 2.0  
Sie sind nicht angemeldet. Atom 1.0  
Forum Home / Bug-Reports / Fehlermeldungen /

Quelltext in javascript wird nicht richtig erkannt

  Beitrag schreiben
Autor
Beitrag Seiten: 1
Gast.jk
Gast



Hallo,

ich benutze sehr gern eure Seite, weil sie wirklich eine wertvolle Hilfe für saubere Webprogrammierung ist. Aber nun habe ich wahrscheinlich ein Bug bei euch entdeckt - bei der Validierung folgender Seite: http://www.siro-blech.de/de/anfahrt.php

Dort ist html-Code im js-Code enthalten und dies wird nicht richtig erkannt.

viele Grüße

Jens++


12.02.2008 20:29:51
  Zitieren
HTMELL
Administrator

Registriert: 11.05.2006
Beiträge: 544
Hi,
das ist kein Bug, siehe http://www.validome.org/doc/HTML_ge/htm ... ript_style


_______________________________________
mfg
Thomas Mell

www.validome.org

13.02.2008 00:22:03
  Zitieren
gast.jk
Gast



Hallo,

vielen Dank für die schnelle Antwort - dennoch hilft sie mir nicht richtig weiter: Ich habe nun die Kapselung mit CDATA weggelassen; aber wenn ich die Anführungszeichen nicht maskiere, wird das Script nicht ordentlich ausgeführt, wenn ich sie maskiere oder nur einfache Anführungszeichen setze, arbeitet das Script zwar fehlerfrei, aber ich bekomme bei euch besagte Fehlermeldung. Bleibt das Auslagern des Scripts als externe Datei, doch das war doch wohl nicht gemeint, oder?

Wo genau liegt mein Fehler?

vielen Dank

Jens++


13.02.2008 09:33:49
  Zitieren
HTMELL
Administrator

Registriert: 11.05.2006
Beiträge: 544
Hi,
Dein Problem sind nicht die Anführungszeichen sondern die "<". Dieses Zeichen bringt den Parser durcheinander, da er glaubt das dort ein Tag beginnt. Da ein Parser nicht wissen kann das der Inhalt des script-Elementes nicht geparst werden soll (woher auch?), behandelt er den Inhalt wie normales HTML, mit dem entsprechenden Fehler.
Du hast nun 3 Möglichkeiten:
1. Bau das Dokument in XHTML um und verwende die Möglichkeit aus http://www.validome.org/doc/HTML_ge/htm ... ript_style
2. Bau den String mit den "<" in soweit um, das dieses Zeichen nicht mehr vorkommt (z.B. String.fromCharCode(60) + "div")
3. Lager den Javascript in eine externe Datei aus


_______________________________________
mfg
Thomas Mell

www.validome.org

13.02.2008 14:44:42
  Zitieren
gast.jk
Gast



ok, vielen Dank, Fehler verstanden und ausgebessert :-)

viele Grüße
Jens++


13.02.2008 17:32:07
  Zitieren
Gurkenpapst
Mitglied

Registriert: 03.10.2007
Beiträge: 31
HTMELL, deine Aussage ist nicht ganz korrekt. Zum einen besagt die DTD klar, dass script-Elemente in HTML nur CDATA enthalten. Insofern sucht der Parser auch nicht nach einem STAGO ("<") sondern nur nach einem ETAGO ("</"). Zum anderen bringt XHTML hier auch nichts. Durch den CDATA-Block ist der Code dann zwar valide, aber es kommt zu Problemen, wenn es von einem HTML-UA verarbeitet werden können soll. Dann wird nämlich zumindest ein "</script>" innerhalb des Script-Blocks diesen vorzeitig beenden, denn auf der HTML-Ebene ist das ja ein zulässiges End-Tag und die CDATA-Instruktion wird ja ignoriert werden, da der Inhalt des script-Elements in HTML schon als CDATA definiert ist und somit die CDATA-Instruktion einfach nur Text ohne spezielle Beeutung ist.

Das Ziel ist also, sämtliche Vorkommen von "</" im script-Element zu verhindern. Dazu reicht es aber schon aus, wenn man den Slash maskiert: "<\/" ist laut ECMA-262 Kapitel 7.8.1 String Literals identisch zu "</", denn "/" ist dort als NonEscapeCharacter definiert, der maskiert das gleiche bedeutet wie unmaskiert.

Valides Beispiel:

Code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title></title>
</head>
<body>
   <p>
    <script type="text/javascript"><!--
      alert("<script><\/script>");
    //--></script>
  </p>
</body>
</html>

Das Aulagern des Codes ist natürlich die einfachste Lösung. Eingebettet in HTML und für uralte UAs in einen Kommentar eingepackt darf in dem Script ja theoretisch auch kein "--" vorkommen, denn das würde ja den Kommentar beenden. In XHTML-UAs würde das Problem auch auftreten, bloß da würde der Kommentar ja eh nicht das gewünschte Ergebnis bringen.

Unter http://www.validome.org/forum/viewtopicp-629-1.htm hatte ich das Problem auch schon mal erklärt.

Zur Vollständigkeit noch in XHTML mit Kompatiblität zu bestehenden HTML-UAs:

Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title></title>
</head>
<body>
  <p>
    <script type="text/javascript"><!--//--><![CDATA[//><!--
      alert("<script><\/script>");
    //--><!]]></script>
  </p>
</body>
</html>

Die seltsam geschachtelte Kommentar/CDATA-Syntax ist nötig, wenn man den script-Block vor Prä-HTML-3.2-UAs verstecken will. Wenn das egal ist, reicht natürlich auch

Code:

<script type="text/javascript">/* <![CDATA[ */
  alert("<script><\/script>");
/* ]]> */</script>



Beitrag geändert von Gurkenpapst (13.02.2008 22:26:55)


13.02.2008 22:11:05
  Zitieren
HTMELL
Administrator

Registriert: 11.05.2006
Beiträge: 544
Hallo,
vielen Dank für die ausführliche Erklärung, man lernt doch nie aus ;-))


_______________________________________
mfg
Thomas Mell

www.validome.org

13.02.2008 23:08:03
  Zitieren
gast.jk
Gast



vielen Dank auch an dich, Gurkenpapst, jetzt sieht der Quelltext wieder einigermassen vernünftig aus :-)

Jens++


14.02.2008 00:36:25
  Zitieren
Seiten: 1   Beitrag schreiben
Wechsel zu

Die letzten Beiträge aus diesen Forum

Valid HTML 4.01