I have this piece of code:
<script language="javascript" type="text/jscript">
document.write("<img src='.lgt?en=P.........TP_Q=&ur=' + escape(document.referrer) + '' border='0' alt='no alt' />");
</script>
and... when I try to validate it, I'm given this error:
document type does not allow element "img" here
…rer) + '" border="0" alt="no alt" />');
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).
Any idea what I can do to make this JavaScript w3c pliant?
I have this piece of code:
<script language="javascript" type="text/jscript">
document.write("<img src='http://dm.leadgenesys./jpgp.lgt?en=P.........TP_Q=&ur=' + escape(document.referrer) + '' border='0' alt='no alt' />");
</script>
and... when I try to validate it, I'm given this error:
document type does not allow element "img" here
…rer) + '" border="0" alt="no alt" />');
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).
Any idea what I can do to make this JavaScript w3c pliant?
Share Improve this question edited Jun 4, 2009 at 22:12 Shog9 160k36 gold badges235 silver badges240 bronze badges asked Jun 4, 2009 at 22:03 AndyAndy 5251 gold badge7 silver badges18 bronze badges 1- The language attribute is deprecated and there's no text/jscript value for the type attribute. Well, there's not text/javascript either, but that's what browsers are used to see right there. – Ionuț G. Stan Commented Jun 4, 2009 at 22:17
6 Answers
Reset to default 5Simple: don't try to validate your JavaScript as HTML.
You can do this in a number of ways... But the best by far is to move it out into a separate JS file, and then either call it from a short script
<body>
...
<script type="text/javascript" language="javascript">WriteImage();</script>
...
</body>
...or better yet, ditch document.write()
entirely and manipulate the DOM after it has loaded.
See also: Unobtrusive JavaScript
Another way to silence the validator...
Put it like this:
<script type="text/javascript">
/* <![CDATA[ */
your_javascript_here("<" + ... ;
/* ]]> */
</script>
The CDATA part should be enough for the validator, the /* style ments */ are for older browsers which do not recognize the CDATA tag (it would otherwise break the javascript).
How aboout
<script>
<!--
var i = null;
if ((i/0) == 12)
alert("whooo! pack your things, as it's starting to rain cats and dogs!");
--><script>
See that the content of the "script" is inside "html ments"?
You probably have your <script>
element in your <head>
, so essentially you're trying to create an <img>
in the head of your document, which doesn't work. You need to put the script in the <body>
.
However, I'd remend you add the element via the DOM instead, because you'll be less likely to run into these kinds of problems.
It's part of the HTML4 standard. You must escape "</" sequences found inside SCRIPT tags.
<SCRIPT type="text/javascript">
document.write ("<EM>This will work<\/EM>")
</SCRIPT>
Another solution, and probably better, is to move the JS code in external files.
Reference
document.write("<" + "img … /" + ">");
Or:
document.write("\x3Cimg … /\x3E");