IE中JS错误(KB927917)的解决办法


博客用了半静态化后,使用了月光的js版postviews,但是ie会提示KB927917的错误,计数器有时候也不会正常工作。查了一些资料,终于解决了。

页面错误提示:Unable to modify the parent container element before the child element is closed (KB927917)

错误描述:“用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media CenterPC 6.0; InfoPath.2),时间戳: Tue, 12 May 2009 13:49:16 UTC消息: HTML Parsing Error: Unable to modify the parent container element before the child element is closed (KB927917)行: 0字符: 0代码: 0。”

简单描述:子HTML元素内包含试图修改子容器的父容器元素的脚本。

去微软知识库查了KB927917,其说明写道:“出现此问题的原因子容器 HTML 元素包含试图修改子容器的父容器元素的脚本。 脚本试图使用innerHTML  方法或  appendChild  方法修改父容器元素。例如如果 DIV 元素是在 BODY 元素中的子容器,并在 DIV 元素中的一个 SCRIPT 块尝试修改 DIV 元素的父容器的BODY 元素,可能会出现此问题”。
这个问题是伟大的浏览器IE发现的,各大浏览器没有这种反馈,原因就是解析的JavaScript的机制不同。这个问题一直到IE8还是存在,估计一直也存在。因为解析JavaScript的解析IE是边读边执行的,所以如果脚本允许修改父元素,并且子元素又没关闭的话,会失去条理性。

 

解决:将JS代码或引用文件放入页面底部的body之后,这样代码在body被解释之后执行,就不会出现这个错误了,对于js版的postviews,将footer.php中的

<?php wp_footer(); ?>

放置于</body>后即可。如果有其他内容需要置于body内的。则修改插件postviews.php文件81行左右,将如下语句注释掉

#add_action("wp_footer","the_views_javascript");

然后将下面的代码置入footer.php的后面

<?php
if(is_single() ){
	echo "<script language=\"javascript\" type=\"text/javascript\">
try{
	var elScript = document.createElement(\"script\");
	elScript.setAttribute(\"language\", \"javascript\");
	elScript.setAttribute(\"src\", \"".get_option("home")."/wp-counter.php?post_id=\" + escape(strBatchView));
	document.getElementsByTagName(\"body\")[0].appendChild(elScript);
	}
catch(e){};
</script> ";
	}
?>

“IE中JS错误(KB927917)的解决办法”的一个回复

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据