Javascript (XHTML validation) problem

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Javascript (XHTML validation) problem

Δημοσίευση από ThyClub » 06 Μάιος 2005 09:34

Λοιπόν το πρόβλημα μου είναι κάπως περίεργο.

Έχω αυτό το κώδικα:

Κώδικας: Επιλογή όλων

<script type="text/javascript">
var b = new BrowserInfo&#40;&#41;;
if&#40;b.name=="Microsoft Internet Explorer"&#41;&#123;
	document.write&#40;"<link rel='stylesheet' type='text/css' href='html_files/templates/memories/skins/ie.css' media='screen, projection, tv' title='Default' />"&#41;;
&#125; 
else if&#40;b.name=="Netscape"&#41;&#123;
	document.write&#40;"<link rel='stylesheet' type='text/css' href='html_files/templates/memories/skins/ns.css' media='screen, projection, tv' title='Default' />"&#41;;
&#125;

function BrowserInfo&#40;&#41;
&#123;
  this.name = navigator.appName;
  this.codename = navigator.appCodeName;
  this.version = navigator.appVersion.substring&#40;0,4&#41;;
  this.platform = navigator.platform;
  this.javaEnabled = navigator.javaEnabled&#40;&#41;;
  this.screenWidth = screen.width;
  this.screenHeight = screen.height;
&#125;
</script>
Βασικά τσεκάρει τον browser και δίνει το κατάλληλο css για την σωστή εμφάνιση της σελίδας σε ΙΕ & FF.

Την δουλειά του την κάνει αρκετά καλά το μόνο πρόβλημα είναι οτι δεν κάνει validation η σελίδα.
Το σφάλμα που παίρνω είναι:http://validator.w3.org/check?uri=http: ... iso-8859-1
Line 55, column 154: document type does not allow element "link" here

...en, projection, tv' title='Default' />");

The element named above was found in a context where it is not allowed. This could mean that you have incorrectly nested elements -- such as a "style" element in the "body" section instead of inside "head" -- or two elements that overlap (which is not allowed).

One common cause for this error is the use of XHTML syntax in HTML documents. Due to HTML's rules of implicitly closed elements, this error can create cascading effects. For instance, using XHTML's "self-closing" tags for "meta" and "link" in the "head" section of a HTML document may cause the parser to infer the end of the "head" section and the beginning of the "body" section (where "link" and "meta" are not allowed; hence the reported error).

&#9993;

Line 58, column 154: document type does not allow element "link" here

...en, projection, tv' title='Default' />");
Καμία ιδέα;;

Άβαταρ μέλους
softius
Script Master
Δημοσιεύσεις: 241
Εγγραφή: 11 Ιαν 2004 19:07
Επικοινωνία:

Javascript (XHTML validation) problem

Δημοσίευση από softius » 06 Μάιος 2005 11:35

Μπορείς να χρησιμοποιήσεις το CDATA για να μην γίνονται parse τα tags. Ένα παράδειγμα:

Κώδικας: Επιλογή όλων

<script .... >
<!--//--><!&#91;CDATA&#91;//><!--
  your javascript code here
//--><!&#93;&#93;>
</script>

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Javascript (XHTML validation) problem

Δημοσίευση από ThyClub » 06 Μάιος 2005 23:32

thnx script master softius :D

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Javascript (XHTML validation) problem

Δημοσίευση από skeftomilos » 08 Μάιος 2005 07:24

Άλλος τρόπος για να μη μπερδεύεται ο validator είναι το escaping των χαρακτήρων < και > με τα \x3c και \x3e αντίστοιχα. Για παράδειγμα ο παρακάτω JavaScript κώδικας:

Κώδικας: Επιλογή όλων

<script type="text/javascript">
  document.write&#40;"\x3cb\x3e" + "Hello!" + "\x3c/b\x3e"&#41;
</script>
... γράφει τον εξής HTML κώδικα:

Κώδικας: Επιλογή όλων

<b>Hello!</b>
Άλλος ένας τρόπος είναι το σπάσιμο του string. Π.χ. το παρακάτω:

Κώδικας: Επιλογή όλων

document.write&#40;"<link rel='stylesheet'"&#41;
... μπορεί να γίνει έτσι για να μη μοιάζει με html tag:

Κώδικας: Επιλογή όλων

document.write&#40;"<" + "link rel='stylesheet'"&#41;
Πάντως το document.write χάνει σιγά-σιγά την αποδοχή του ως μέθοδος χειρισμού μίας σελίδας γιατί θεωρείται άκομψο σε σχέση με τις μεθόδους του DOM:

Κώδικας: Επιλογή όλων

var element = document.createElement&#40;"link"&#41;
element.setAttribute&#40;"type", "text/css"&#41;
element.setAttribute&#40;"rel", "stylesheet"&#41;
element.setAttribute&#40;"href", "html_files/templates/memories/skins/ie.css"&#41;
element.setAttribute&#40;"media", "screen, projection, tv"&#41;
element.setAttribute&#40;"title", "Default"&#41;
document.getElementsByTagName&#40;"head"&#41;&#91;0&#93;.appendChild&#40;element&#41;
Δουλεύει σε Firefox, IE, Opera.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Javascript (XHTML validation) problem

Δημοσίευση από ThyClub » 10 Μάιος 2005 19:49

Πάντως το document.write χάνει σιγά-σιγά την αποδοχή του ως μέθοδος χειρισμού μίας σελίδας γιατί θεωρείται άκομψο σε σχέση με τις μεθόδους του DOM:

κώδικας:
var element = document.createElement("link")
element.setAttribute("type", "text/css")
element.setAttribute("rel", "stylesheet")
element.setAttribute("href", "html_files/templates/memories/skins/ie.css")
element.setAttribute("media", "screen, projection, tv")
element.setAttribute("title", "Default")
document.getElementsByTagName("head")[0].appendChild(element)


Δουλεύει σε Firefox, IE, Opera.
:o DOM learning time :reading: :reading: :reading: :reading: :reading:

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης