Tom: W3-Validatorfehler wegen document.writeln

Ich verwende auf meiner Seite zur Korrektur von Anzeigeproblemen in Netscape 4.x ein kleines Script, das mir einige CSS-Definitionen, die ich in der zentralen .CSS Datei festgelegt habe zurechtbiegt.

Der Code dazu sieht so aus:

<script language="JavaScript" type="text/javascript">
  19: <!--
  20:  if((navigator.appName == "Netscape") && (navigator.appVersion.charAt(0) < "5"))
  21:   {
  22:    document.writeln('<style type="text/css"> td.header {background-color : white; border : none; font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 12pt; font-style : normal; font-weight : normal; text-align : center; vertical-align : middle; width: auto;height: 40px; padding : 2px 10px 2px 10px;} td.plain {background-color : white; border : none; font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-style : normal; font-weight : normal; padding : 0px 0px 0px  0px; width: auto; height: auto;} .button {width:auto; border:none;} td {background : White; border : 1px solid Black; font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 11pt; font-style : normal; font-weight : normal; text-align : center; vertical-align : middle; width: 200px; height: 40px; padding : 2px 10px 2px 10px;} </style>');
  23:   }
  24:  else
  25:   {
  26:
  27:   }
  28: -->
  29: </script>

wäre nach meiner Ansicht eigentlich korrekt und funktioniert auch wunderprächtig.

Der W3 Validator meint dazu jedoch:

This page is not Valid HTML 4.01 Transitional!

Line 22, column 850:  end tag for element "STYLE" which is not open  (explain...).

...padding : 2px 10px 2px 10px;} </style>');
                                          ^

weiters wird bei Netscape 4.x ein Hinweis eingeblendet, dass es einige Darstellungsfehler gibt, welcher auch mittels Browserversionsabfrage und document.writeln() realisiert, welche den Validator ebenfalls stört:

Line 79, column 381:  end tag for element "P" which is not open  (explain...).

...unter. Bitte dies zu entschuldigen</p><p class="klein"> </p>');
                                          ^

Line 79, column 408: end tag for element "P" which is not open (explain...).

...uldigen</p><p class="klein"> </p>');
                                          ^
Angefangen natürlich mit document.writeln('<p class="..."> ......

Jemand eine Idee, was da faul ist und wie man den Validator dazu überredet, das Ganze zu akzeptieren oder was ich ändern muss?

  1. Hi,

    Ich verwende auf meiner Seite zur Korrektur von Anzeigeproblemen in Netscape 4.x ein kleines Script, das mir einige CSS-Definitionen, die ich in der zentralen .CSS Datei festgelegt habe zurechtbiegt.

    Der Code dazu sieht so aus:

    <script language="JavaScript" type="text/javascript">
      22:    document.writeln('<style type="text/css"> [...viel CSS gekürzt, da irrelevant...] padding : 2px 10px 2px 10px;} </

    genau an dieser Stelle ist das Script-Element zu Ende.

    wäre nach meiner Ansicht eigentlich korrekt und funktioniert auch wunderprächtig.

    Ist nicht korrekt, funktioniert aber in manchem Browser, weil die teilweise (zu) fehlertolerant sind.

    Der W3 Validator meint dazu jedoch:
    This page is not Valid HTML 4.01 Transitional!

    Line 22, column 850:  end tag for element "STYLE" which is not open  (explain...).

    ...padding : 2px 10px 2px 10px;} </style>');

    Und damit hat er vollkommen recht.
    Denn, wie bereits oben erwähnt, endet der Inhalt eines Script-Elements beim ersten Auftreten des end-tag-open-delimiters </
    Siehe auch: http://www.w3.org/TR/html401/types.html#type-cdata

    Jemand eine Idee, was da faul ist

    Dein Code.

    und wie man den Validator dazu überredet, das Ganze zu akzeptieren oder was ich ändern muss?

    Du mußt aus dem end-tag-open-delimiter eine harmlose Zeichenkette machen, indem Du z.B. das zweite Zeichen escapest.

    PS: seltsam, ist heute schon der 3. oder 4. Thread, wo es um den end-tag-open-delimiter geht. Wochenlang war nix damit...

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
  2. hi,

    wenn du bei JS mit writeln arbeitest, musst du die / escapen.
    sprich </script> wird zu </script>...

    gruß
    christopher