今天调试一段JS代码出现这样的情况:在火狐、IE6/IE7和谷歌浏览器下都正常,但在IE8下运行却没有完全加载整个页面,
并出现了下面的网页错误详细信息:

用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET4.0C; Alexa Toolbar)
时间戳: Wed, 28 Mar 2012 00:33:23 UTC

消息: HTML Parsing Error: Unable to modify the parent container element before the child element is closed (KB927917)
行: 0
字符: 0
代码: 0
URI: http://www.35phone.com/flow.php?step=checkout

郁闷,在网上搜索了一下相关资料,一般说法都是说所指定的标签没有加载完就调用了该对象….

现普遍的背景情况是:

1.页面A通过iframe引入页面B
2.页面B通过document.write()方法加载js文件a.js
3.页面B底部调用a.js中的函数func进行初始化,并调用appendChild函数操作父页面A

网上提供的分析解决办法:

原因:因为某些DOM操作发生在DOM树加载完成之前,比如appendChild

问题定位:页面B还没有加载完a.js文件时,操作了父页面A

解决办法:更改初始化方法为setTimeout(func, 0);
我自己查看了下引起该问题的代码:

        <ul id=”header_userinfo”>
        <li><script type=”text/javascript”>GetLoginInfo(location.href)</script></li> 
        </ul>

现通过修改代码解决了问题:

        <ul id=”header_userinfo”>
        <li><script type=”text/javascript”>$(document).ready(function() { GetLoginInfo(location.href); });</script></li>
        </ul>

推荐比较简单的解决方法:

将JavaScript代码或引用的JS文件放入页面底部的body标签之后,这样代码在</body>被解释之后执行,就不会出现这个错误了。
DatePicker控件目前会有此问题。
另外,再提供彻底解决针对IE8这个Bug问题的方法:

安装IE8的KB2416400补丁,重启,OK!

KB2416400下载:
http://www.microsoft.com/downloads/zh-cn/results.aspx?freetext=KB2416400&displaylang=zh&stype=s_basic
根据系统和IE版本进行下载即可!