为什么我的脚本无法通过w3c验证?

时间:2009-06-04 22:03:26

标签: javascript xhtml w3c-validation

我有这段代码:

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

和...当我尝试验证它时,我收到了这个错误:

  

文档类型不允许元素   “img”在这里

     

... rer)+'“border =”0“alt =”no alt“   /&GT;');

     

上面提到的元素是在a中找到的   不允许的上下文。这个   可能意味着你有错误   嵌套元素 - 例如“样式”   而“身体”部分中的元素   内部“头部” - 或两个元素   重叠(不允许)。

知道如何才能使这个JavaScript符合W3c标准?

6 个答案:

答案 0 :(得分:5)

简单:不要尝试将您的JavaScript验证为HTML。

你可以通过多种方式实现这一目标......但到目前为止最好的方法是将其移到一个单独的JS文件中,然后从短脚本中调用它

<body>
...
<script type="text/javascript" language="javascript">WriteImage();</script>
...
</body>

...或者更好的是,完全抛弃document.write()并在加载后操纵DOM。

另见:Unobtrusive JavaScript

答案 1 :(得分:5)

使验证器静音的另一种方法......

这样说:

<script type="text/javascript">
/* <![CDATA[ */
your_javascript_here("<" + ... ;
/* ]]> */
</script> 

CDATA部分应该足够用于验证器,/ *样式注释* /适用于不识别CDATA标记的旧浏览器(否则会破坏javascript)。

答案 2 :(得分:2)

您的<script>可能包含<head>元素,因此您实际上是在文档的头部创建<img>,但这不起作用。您需要将脚本放在<body>

但是,我建议你改为add the element via the DOM,因为你不太可能遇到这些问题。

答案 3 :(得分:2)

怎么样

<script>
<!--
var i = null;
if ((i/0) == 12)
  alert("whooo! pack your things, as it's starting to rain cats and dogs!");
--><script>

看到“脚本”的内容在“html评论”里面?

答案 4 :(得分:1)

这是HTML4标准的一部分。您必须转义在SCRIPT标记内找到的“&lt; /”序列。

<SCRIPT type="text/javascript">
  document.write ("<EM>This will work<\/EM>")
</SCRIPT>

另一种解决方案,也许更好的方法是将JS代码移到外部文件中。

Reference

答案 5 :(得分:0)

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

或者:

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