- From: Frank Ellermann <nobody@xyzzy.claranet.de>
- Date: Thu, 14 Feb 2008 21:09:56 +0100
- To: www-validator@w3.org
Jürgen Schmid wrote:
> This module puts the following lines into the html:
| <script type="text/javascript">$("head").append("<style
| type='text/css'>form.rating{display:none}</style>");
| if ($.browser.safari){ $("head").find("style:last").append(" ")
| }</script>
What the validator "sees" is something like this:
| <script type="text/javascript"> (...) <style
| type='text/css'> (...) </style> (...) </script>
> The validator tells me:
> Line 51, Column 71: document type does not allow element
> "style" here.
Yes, that is correct, you cannot have other elements in a
script. A HTML trick to get around this could be to put
the content of the script into a comment:
| <script type="text/javascript"><!--
| (...) <style type='text/css'> (...) </style> (...)
| //--></script>
For XHTML it's more convoluted, something like:
| <script type="text/javascript"><!--//--><![CDATA[//><!--
| (...) <style type='text/css'> (...) </style> (...)
| //--><!]]></script>
> I would be glad if anybody could tell me, it the script
> is incorrect or if it's a bug in the validator.
The script itself is probably fine, you just cannot
put it "as is" inline into a script-element.
JFTR an attempt to explain the XHTML magic, but without
guarantee that I get it right:
<script type="text/javascript"><!--//--><![CDATA[//><!--
0..............................1...2.3..4........5..6...
1: At this point the script begins as far as a browser
is concerned, and browsers know that inline scripts
need some comment <!-- magic //--> to stay out of
trouble wrt to HTML.
But an XHTML browser can follow XML rules, and XML
rules would eliminate the "script in a comment" magic.
2: // starts a Javascript comment, JS interpreters will
ignore the rest of the line when they run the script.
3: For XML rules this terminates the HTML comment 1, an
XHTML browser sees the following <![CDATA[ section (4)
5: Again a JS comment, I'm not sure what it does, likely
convincing HTML browsers that the <![CDATA[//> can be
ignored as "unsupported element".
6: Again a HTML comment, HTML browsers looking for the
terminating </script> ignore the inline script for
this job, same idea as in (1) after 3..5 handled XML.
//--><!]]></script>
7.8..9.A..B........
7: As far as JS is concerned this line is a comment.
8: Terminate comment started in (6).
9: Pretend that <!]]> is an "unsupported element", maybe
<]]> without "!" would be bad enough here (untested).
A: Finish <![CDATA[ started in (4).
B: The end of the script element, closing (0), see above.
Frank
Received on Thursday, 14 February 2008 20:08:35 UTC