Why is my script failing w3c validation?

允我心安 提交于 2020-01-04 14:15:17

问题


I have this piece of code:

<script language="javascript" type="text/jscript">
  document.write("<img src='http://dm.leadgenesys.com/jpgp.lgt?en=P.........TP_Q=&amp;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 compliant?


回答1:


Simple: 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




回答2:


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 comments */ are for older browsers which do not recognize the CDATA tag (it would otherwise break the javascript).




回答3:


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 comments"?




回答4:


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 recommend you add the element via the DOM instead, because you'll be less likely to run into these kinds of problems.




回答5:


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




回答6:


document.write("<" + "img … /" + ">");

Or:

document.write("\x3Cimg … /\x3E");


来源:https://stackoverflow.com/questions/953372/why-is-my-script-failing-w3c-validation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!