`
Kenny.Lee
  • 浏览: 514885 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

解决IE的KB927917问题

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

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

这个问题是伟大的浏览器IE发现的,各大浏览器没有这种反馈,原因就是解析的JavaScript的机制不同。这个问题一直到IE8还是存在,估计一直也存在。因为解析JavaScript的解析IE是边读边执行的,所以如果脚本允许修改父元素,并且子元素又没关闭的话,会失去条理性。

首先是微软的详细解释:http://support.microsoft.com/kb/927917

而网上一般发生的情况都是在appendChild或者是innerHTML,例如下面的例子:

<html> 
<body> 
  <div>
   <script type="text/javascript">
var newElem = document.createElement('foo');
    document.body.appendChild(newElem);
   </script>
  </div>
</body>
</html> 


但我遇到的却提示在:

		var isKonqueror = /KHTML/.test(navigator.userAgent);
		var isIE = ( /MSIE/.test(navigator.userAgent) && !/(Opera|Gecko|KHTML)/.test(navigator.userAgent) );
		var iframe = document.createElement("iframe");
		iframe.style.width = "100%";
		iframe.style.height = "20px";
		iframe.style.overflowX = "auto";
        iframe.scrolling = "no";
		iframe.marginWidth = 0;
		iframe.marginHeight = 0;
		iframe.border = 0;
		iframe.frameBorder = 0;
		iframe.style.border = "none";
		function resizeAndNullIframe() { resizeIframe(); iframe = null;};
		function resizeIframe() {
			if (iframe !=null) {
				var w = iframe.offsetWidth, b = iframe.contentWindow.document.body;
                if (b.scrollWidth > w) {
					b.style.overflow = "auto";
					b.style.width = w + "px";
				} else {
					iframe.style.width = b.scrollWidth -20 + "px";
				}
                    var i_frame = iframe;
                //alert(b.scrollHeight+"|"+iframe.offsetHeight);
                var _delay = isIE ? 300 : 0 ;
                setTimeout(function(){ i_frame.style.height = b.scrollHeight + 30 + "px";}, _delay);
            }
		};
		document.getElementById("iframeBody1").appendChild(iframe);


iframeBody1为存放此段代码的容器ID。最大嫌疑的只有document.createElement("iframe")一段,但改起来比较麻烦。

而通过IE Developer调试获得的准确位置是在:
iframe.style.width = b.scrollWidth -20 + "px";


虽然看了好久还是不知道原因,调试尝试把这句去掉,依然报错,但是IE Developer已经没有任何提示信息,单纯的报错。

最后想了下,因为是微软独特的问题,又想起微软另外一个独特的属性,"defer"。使用后问题马上迎刃而解了。

这个加入后不用修改原来任何代码,并且兼容各种浏览器了,问题解决。

最后发现其实微软的MSDN上早已列举了解决办法,其中也包括使用defer。貌似又兜了一圈。不到自己为微软叹息,自己搞出来的问题,使用自己的方法解决,最后受苦的还是我们。唉。

具体MSDN地址:http://blogs.msdn.com/ie/archive/2008/04/23/what-happened-to-operation-aborted.aspx

官方给出的解决办法如下:

   1. Moving your script execution to a function that is invoked after parsing is complete (e.g., onload)
   2. Adding the defer boolean attribute to the script block (this defers execution of the script content until parsing is complete)
   3. Limiting your tree modifications to the script-element's immediate parent
   4. Moving the location of your script block to a child of the body (this usually solves most problems, while allowing the most flexibility in terms of scenarios).
1
0
分享到:
评论

相关推荐

    IE11-Windows6.1-KB3008923.zip

    标题“IE11-Windows6.1-KB3008923.zip”指的是一个针对Internet Explorer 11(简称IE11)浏览器的更新补丁,该补丁是为了解决在Windows 7操作系统上,用户在更新后无法正常使用F12开发者工具的问题。这个补丁的编号...

    WindowsServer2003-KB914961-SP2-x86-CHS(IE6升级IE8补丁).zip

    KB914961是微软发布的一个关键更新,主要用于解决IE6在Windows Server 2003 SP2上的一些已知问题和安全风险。这个补丁文件的全名是"WindowsServer2003-KB914961-SP2-x86-CHS(IE6升级IE8补丁).zip",其中,KB代表...

    解决IE11中无法使用F12调试工具的问题

    本篇将详细介绍如何解决IE11中F12调试工具无法使用的常见问题。 首先,确保你的IE11浏览器是最新版本。微软定期发布更新来修复已知问题和提高性能。你可以通过打开"设置" &gt; "更新和安全" &gt; "Windows Update"检查...

    解决IE10和IE11点击LinkButton没反应的服务端补丁

    解决IE10和IE11点击LinkButton没反应的问题,由于Microsoft .Net Framework 4.0下ASP.NET在IE10以上版本访问LinkButton时不能触发doPostBack事件,在分页或者控件使用LinkButton的时候点击无反应或提示doPostBack...

    解决IE7不能安装的问题

    ### 解决IE7不能安装的问题 #### 背景与挑战 在进行互联网浏览器的升级过程中,用户可能会遇到各种各样的问题。其中一个较为常见的问题是Internet Explorer 7(以下简称IE7)无法正常安装的情况。本文将详细探讨...

    KB3008923 64 位 ie11 针对F12报错

    KB3008923 是一个针对64位系统上的Internet Explorer 11(简称IE11)的更新补丁,主要解决F12开发者工具中的错误问题。F12开发者工具是IE11内置的一个强大调试工具,用于帮助Web开发者进行网页的调试、性能分析和...

    完美解决IE8 DEP方法

    **完美解决IE8 DEP问题详解** IE8 DEP(数据执行保护,Data Execution Prevention)问题,是Windows操作系统为了增强安全防护而推出的一项功能。当IE8浏览器在运行过程中遇到DEP警告,提示“为了帮助保护您的计算机...

    IE10及IE11安装所需更新包

    3. KB2731771:这个更新修复了一些可能导致IE10或IE11崩溃或者性能下降的已知问题。 4. KB2639308:这是一款关键的安全更新,防止恶意软件利用浏览器漏洞攻击用户。 5. KB2533623:这个更新主要关注的是提高系统的...

    IE11官方安装包(解决了F12控制台报错问题)

    标题中的“IE11官方安装包(解决了F12控制台报错问题)”指的是微软的Internet Explorer 11浏览器的官方更新包,这个版本特别修复了F12开发者工具控制台中的错误问题。IE11是微软在Windows 7、Windows 8.1以及...

    WIN7 32位 IE11 升级前置补丁

    标题中的“WIN7 32位 IE11 升级前置补丁”指的是为Windows 7 32位操作系统上的Internet Explorer 11浏览器提供的一系列必要更新,这些更新是升级到IE11所必需的,确保系统兼容并解决可能存在的问题。 在描述中提到...

    Win7升级IE11必要前置补丁32位

    "Win7升级IE11必要前置补丁32位"这个压缩包文件正是为了解决这个问题,它包含了针对32位Windows 7系统升级到IE11所需的所有关键更新。 首先,我们需要理解为何需要这些补丁。IE11的升级并不像简单的下载安装程序...

    解决IE7CPU占用总是居高的微软补丁

    标题中的“解决IE7 CPU占用总是居高的微软补丁”是指针对Internet Explorer 7(简称IE7)浏览器的一个特定问题,即在使用过程中,IE7的CPU占用率异常高,导致计算机性能下降或者运行缓慢。这可能是由于浏览器的某些...

    IE11-离线安装包.zip

    为了解决这个问题,我们可以使用"IE11-离线安装包.zip"这样的离线安装解决方案。这个压缩包特别之处在于它包含了离线补丁,意味着用户可以在不连接外网的情况下进行安装。这种设计对于企业环境尤其有利,可以避免在...

    IE9所需更新包(For 64bit Win7)

    这些更新包通常修复了IE9的已知问题,提升了浏览器的安全性和稳定性,可能还包括性能优化和功能改进。例如,它们可能解决了可能导致浏览器崩溃或运行缓慢的漏洞,增强了对Web标准的支持,或者增加了对新网页技术的...

    IE10离线下载包(已包含补丁)

    3. **KB2533623**:这个补丁主要修复了IE浏览器中的多个内存泄漏问题,提高了浏览器的性能和稳定性。 4. **KB2670838**:这是一个关键的安全更新,解决了可能允许远程代码执行的漏洞,对于防范黑客攻击至关重要。 ...

    IE8升IE10补丁.rar

    这个补丁主要是为了解决在内网环境下无法正常升级IE浏览器的问题。 【描述】提到的"win7下IE8升IE10所需补丁"表明这个补丁是专门为运行Windows 7操作系统的计算机设计的。由于内网环境通常有更严格的网络访问控制,...

    IE11离线独立安装包Windows7_x64

    在Windows Update中,KB2888049通常作为一个单独的补丁发布,用于解决IE11中的已知问题和增强其功能。这个补丁包含在离线安装包内,确保用户即使在无法访问互联网的环境中也能安装这些重要更新。** **对于那些依赖...

    IE7-WindowsXP-KB978207-x86-CHS.exe

    此更新解决了 Microsoft Security Bulletin MS10-002 中讨论的漏洞。 IE7-WindowsXP-KB978207-x86-CHS.exe

    KB3008923 32 位 ie11 针对F12报错

    KB3008923 是一个针对32位版本Internet Explorer 11(简称ie11)的重要更新,主要用于解决F12开发者工具中出现的错误问题。这个补丁的发布是为了提升浏览器的稳定性和性能,特别是对于开发人员来说,F12工具是他们...

Global site tag (gtag.js) - Google Analytics