xhtml mit komplexem JS validiert nicht
Manu
- html
Morgen zusammen,
ich checke gerade mein Backend auf Validität, dabei bekomme ich bei einem relativ aufwändigen JS für eine Autocomplete-Funktion 5 Validierungsfehler.
Das Javascript ist folgendermaßen eingebunden:
<script type="text/javascript">
// <![CDATA[
...
this.fnContactListByLastnameFormatter = function(oResultItem, sQuery) {
var sKey = oResultItem[0];
var iOID = oResultItem[1];
var sEmail = oResultItem[2];
var sKeyQuery = sKey.substr(0, sQuery.length);
var sKeyRemainder = sKey.substr(sQuery.length);
if(sEmail != '') {
var aMarkup = ["<div class='sample-result'>",
"<span class='sample-query'>",
sKeyQuery,
"</span>",
sKeyRemainder,
"</div><div class='sample-quantity'>(",
sEmail,
")</div>"];
} else {
var aMarkup = ["<div class='sample-result'>",
"<span class='sample-query'>",
sKeyQuery,
"</span>",
sKeyRemainder,
"</div>"];
}
return (aMarkup.join(""));
};
...
// ]]>
</script>
Die Fehler beziehen sich auf den obigen Codeschnipsel:
Result: 5 Fehler / 0 Warnungen
line 2555 column 11 - Fehler: end tag for element "SPAN" which is not open
line 2557 column 10 - Fehler: end tag for "SCRIPT" omitted, but its declaration does not permit this
line 2418 - Info: start tag was here
line 2937 column 3 - Fehler: marked section end not in marked section declaration
line 2938 column 8 - Fehler: end tag for element "SCRIPT" which is not open
line 3064 column 5 - Fehler: end tag for element "DIV" which is not open
Irgendwie scheint der Validator zu stolpern - gibt es vielleicht noch eine Möglichkeit, das Javascript vor ihm zu verstecken?
(Der Code funktioniert soweit, ich erstelle mit dem JS divs und spans für mein Autocomplete-Dropdown)
Gruß,
Manu
tach manu,
wie wär's das js auszulagern??
Hallo xxy ;)
Das ist wie im anderen Posting erwähnt nur mit größerem Aufwand verbunden, da ich eine Handvoll Smarty-Variablen einsetzen muss...
Gruß,
Manu
Hallo xxy ;)
Das ist wie im anderen Posting erwähnt nur mit größerem Aufwand verbunden, da ich eine Handvoll Smarty-Variablen einsetzen muss...
Gruß,
Manu
guck mal auf die uhrzeit der posts ;)
Irgendwie scheint der Validator zu stolpern - gibt es vielleicht noch eine Möglichkeit, das Javascript vor ihm zu verstecken?
Nachdem ich die Misere um XHTML mal zur Kenntnis genommen habe, kam ich zum Schluss, dass Auslagerung aller Scripte und Stylesheets in externe Dateien der Nerven schonenste Weg ist. Das würde ich auch für HTML grundsätzlich empfehlen.
mfg Beat
Nachdem ich die Misere um XHTML mal zur Kenntnis genommen habe, kam ich zum Schluss, dass Auslagerung aller Scripte und Stylesheets in externe Dateien der Nerven schonenste Weg ist. Das würde ich auch für HTML grundsätzlich empfehlen.
Grundsätzlich stimme ich Dir da zu, allerdings baue ich die Seite & die JS-Funktionen mit einigen Smarty-Variablen zusammen, daher befindet sich der JS-Code direkt unter dem HTML-Script.
Gruß,
Manu
Grundsätzlich stimme ich Dir da zu, allerdings baue ich die Seite & die JS-Funktionen mit einigen Smarty-Variablen zusammen, daher befindet sich der JS-Code direkt unter dem HTML-Script.
dann versuch mal Javascript mit CDATA korrekt in XHTML einzubinden
Hallo Suit,
dann versuch mal Javascript mit CDATA korrekt in XHTML einzubinden
was ist an meiner Einbindung auszusetzen?
Gruß,
Manu
was ist an meiner Einbindung auszusetzen?
mein fehler - mit // kommentierst du natürlich auch aus ;)
Hallo,
dann versuch mal Javascript mit CDATA korrekt in XHTML einzubinden
Diese Quelle verbreitet ziemlich viel Unsinn. Da ist von älteren und neueren Browsern die Rede. Damit hat die Sache aber gar nichts zu tun. Browser machen von sich aus gar nichts. Der Punkt, an dem sich entscheidet, wie das Markup verarbeitet wird, ist der MIME-Typ. Es geht darum, dass ein XHTML-Dokument sowohl als HTML-Tag-Soup als auch als XML verarbeitet werden kann.
Das Problem von
<script type="text/javascript">;
<![CDATA[
//content of your Javascript goes here
]]>
</script>
sind nicht irgendwelche "älteren Browser", sondern die Verarbeitung als HTML-Tag-Soup (text/html). In dem Fall wird "<![CDATA[" als JavaScript-Code interpretiert, was natürlich einen Fehler wirft und zum Abbruch des Scriptes führt. Also: Auskommentieren.
Das hier:
<script type="text/javascript">
<!-- // hide from really old browsers that noone uses anymore
// also hide from browsers that use the XHTML DTD
// content of your Javascript goes here
// -->
</script>
ist nicht "für moderne Browser und den Validator" problematisch, sondern immer dann, wenn das Dokument mit einem XML-Parser verarbeitet wird. Das macht der Validator natürlich, insofern stimmt die Aussage teilweise.
Die spekulative Erklärung
"Somit wird es wahrscheinlich bei einer neuen Generatoin Browser, welche sich strikt an XHTML Richtlinien hält, nicht mehr ausgeführt"
ist genauso irreführend wie
"hide from browsers that use the XHTML DTD"
Für einen Browser ist dieser Kommentar nur dann problematisch, wenn er das XHTML als mit seinem XML-Parser verarbeitet. Dazu muss der Webserver einen entsprechenden MIME-Typ senden (application/xhtml+xml, application/xml...). Es passiert nicht automatisch, nur weil der Browser modern ist oder standardkonform ist!
Die Seite http://de.selfhtml.org/html/xhtml/unterschiede.htm dürfte den Sachverhalt besser darstellen.
Mathias
Yerf!
line 2555 column 11 - Fehler: end tag for element "SPAN" which is not open
Irgendwie scheint der Validator zu stolpern - gibt es vielleicht noch eine Möglichkeit, das Javascript vor ihm zu verstecken?
Er stolpert über die End-Tags in den Strings (was dir theoretisch auch in einem Browser passieren könnte). Die Lösung müsste sein, den Schrägstrich zu maskieren:
"</span>"
Gruß,
Harlequin
Hallo!
"</span>"
Danke für den Hinweis, werde ich mir gleich mal anschauen...
*arbeitarbeit*
Gruß,
Manu
Hallo,
Er stolpert über die End-Tags in den Strings (was dir theoretisch auch in einem Browser passieren könnte). Die Lösung müsste sein, den Schrägstrich zu maskieren:
Nein, das ist keine Lösung für XHTML, nur für HTML. Die Lösung für XHTML ist der bereits benutzte CDATA-Bereich.
Diese Maskierung ist u.U. für Browser sinnvoll, wenn XHTML als HTML ausgeliefert wird. Allerdings stellt es einen Validator, der XML-Regeln anlegt, nicht zufrieden.
Mathias
Yerf!
Nein, das ist keine Lösung für XHTML, nur für HTML. Die Lösung für XHTML ist der bereits benutzte CDATA-Bereich.
Demnach wird der Code nach HTML und nicht nach XHTML-Regeln validiert. (Ich hab mich mit dem Zusammenspiel von Inline-JS und XHTML nocht nicht auseinandergesetzt, kannte die Meldung hier aber halt noch vom HTML-Validator)
Diese Maskierung ist u.U. für Browser sinnvoll, wenn XHTML als HTML ausgeliefert wird. Allerdings stellt es einen Validator, der XML-Regeln anlegt, nicht zufrieden.
Somit wäre doch eine Kombination aus beidem die Lösung, oder? Schließlich wird XHTML häufig als HTML verarbeitet.
Gruß,
Harlequin
Hallo,
Somit wäre doch eine Kombination aus beidem die Lösung, oder? Schließlich wird XHTML häufig als HTML verarbeitet.
Ja. Wobei praktisch kein Browser der Regel folgt (weil kein Webautor der Regel folgt), ein script-Element bei einem "</" zu schließen, sondern auf ein </script> wartet.
Mathias
@@molily:
sondern auf ein </script> wartet.
Weshalb man auch nicht die Kurzschreibweise
<script type="text/javascript" src="foo.js" />
nutzen sollte, sondern
<script type="text/javascript" src="foo.js"></script>
Live long and prosper,
Gunnar
Hallo,
Irgendwie scheint der Validator zu stolpern - gibt es vielleicht noch eine Möglichkeit, das Javascript vor ihm zu verstecken?
dein Code ist fehlerfrei und erzeugt bei meinen Tests keine Validierungsfehler.
Der CDATA-Bereich müsste ausreichen.
Mathias