一、
又漲見識了
IE8報下面錯誤,而且是我的機器不報,同事的機器報,試了4台,兩個報,兩個不報,IE版本都一樣,沒想明白
解決:
1、查看是否有未關閉的html標簽,比如<table>而沒有</table> (我就是這個原因)
2、是否在頁面未加載完前js代碼操作了body裡的元素,將相關js代碼移到</body>後面
網頁錯誤詳細信息
用戶代理: 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 Center PC 6.0)
時間戳: Wed, 14 Apr 2010 08:33:56 UTC
消息: HTML Parsing Error: Unable to modify the parent container element before the child element is closed (KB927917)
行: 0
字符: 0
代碼: 0
URI:
http://support.microsoft.com/kb/927917
二、
它的發生,是因為某些DOM操作發生在DOM樹加載完成之前,比如appendChild
就像下面的代碼:
<html>
<head>
</head>
<body>
<div>
<script type="text/javascript">
alert(document.readyState);
var oDiv = document.createElement("DIV");
oDiv.innerHTML = 'test odiv test odiv';
document.body.appendChild(oDiv);
</script>
</div>
</body>
</html>
當解析到DIV時就開始在BODY上appendChild,而這個時候BODY是還沒有完全就緒的(It is not fully loaded),文檔結構仍在loading和interactive狀態之間,於是,便會得到上述錯誤。當然,該錯誤目前已確切知道的會存在於IE6和 IE7兩個版本中(低於IE6的未進行測試),在IE8中將會得到一個HTML解析錯誤:HTML Parsing Error: Unable to modify the parent container element before the child element is closed (KB927917)
1.要解決這個問題,可以進行document.readyState狀態判斷,當它為complete時再進行相應的操作,或者給script標簽加上defer屬性(該屬性在IE8中已不獲支持)。
2.或者
js中加入了 setTimeout("XXXX()",1000);,使其獲得足夠的加載時間後執行目標(XXXX)的function,於是問題得到解決