出现此问题可能是因为在IE下,在加载文档的过程中,整个HTML文档的DOM结构尚未生成完整,而此时正在执行的JS就已创建出新的DOM结点了,致使DOM树的结构发生紊乱。

解决办法

Jquery
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function UpdateItem(urlStr) {
var url = "url:" + urlStr;
OpenIframe("修改", "300", "250", url);
}
function OpenIframe(sTitle, sWidth, sHeight, sContent) {
if (sWidth == "") sWidth = 'auto';
if (sHeight == "") sHeight = 'auto';
$.dialog({
id: "iframe1",
lock: true,
title: sTitle,
width: sWidth,
height: sHeight,
content: sContent
});
C#
1
2
3
4
5
6
string jsStr = "<script>UpdateItem('TaxGroupTaxSettingItemPage.aspx?RecordID=" + OpID + "');</script>";
Page.ClientScript.RegisterStartupScript(typeof(Page), Guid.NewGuid().ToString(), jsStr);
//由于OpenIframe方法改变了DOM结构所以出现了此问题,解决方法是调用JavaScript时加上defer属性,改变后如下:
string jsStr = "<script defer='defer'>CreateItem('TaxGroupTaxSettingItemPage.aspx?RecordID=" + OpID + "');</script>";
Page.ClientScript.RegisterStartupScript(typeof(Page), Guid.NewGuid().ToString(), jsStr);

其他方法(未验证)

  • 加入setTimeout来解决。即在调用改变DOM的操作时先判断document.readyState==”complete”, 若为false,则setTimeout设置为若干秒之后进行该操作。
  • 使用doScroll 进行判断DOM是否准备完毕