2

我有这段代码:

<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" />');

上面提到的元素是在不允许的上下文中找到的。这可能意味着您有错误的嵌套元素——例如“body”部分中的“style”元素而不是“head”内部——或者两个重叠的元素(这是不允许的)。

知道我可以做些什么来使这个 JavaScript w3c 兼容吗?

4

6 回答 6

5

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

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

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

...或者更好的是,document.write()完全放弃并在加载 DOM 后对其进行操作。

另请参阅:不显眼的 JavaScript

于 2009-06-04T22:06:08.797 回答
5

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

把它像这样:

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

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

于 2009-06-04T22:14:09.263 回答
2

你可能有你的<script>元素<head>,所以基本上你试图<img>在你的文档的头部创建一个,这不起作用。您需要将脚本放在<body>.

但是,我建议您改为通过 DOM 添加元素,因为您遇到此类问题的可能性较小。

于 2009-06-04T22:04:41.280 回答
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 注释”中了吗?

于 2009-06-04T22:14:48.980 回答
1

它是 HTML4 标准的一部分。您必须转义 SCRIPT 标签内的“</”序列。

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

另一种可能更好的解决方案是将 JS 代码移动到外部文件中。

参考

于 2009-06-04T22:11:44.213 回答
0
document.write("<" + "img … /" + ">");

或者:

document.write("\x3Cimg … /\x3E");
于 2009-06-04T22:17:24.297 回答