`
Kenny.Lee
  • 浏览: 510477 次
  • 性别: 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
分享到:
评论

相关推荐

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

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

    IE7-WindowsXP-KB978207-x86-CHS.exe

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

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

    IE11官方安装包,IE11-Windows6.1-KB3008923-x64.msu。解决了F12控制台报错

    ie10安装更新系统包

    解决方法:附件提供了”KB2533623“、”KB2670838“、”KB2729094“、”KB2731771“、”KB2786081“这五个64位windows7系统的更新。 1)在C盘根目录下新建updata空文件夹,将附件的五个更新和1.bat放在update文件夹...

    IE11无法进入F12以及报错的解决办法.docx

    上网搜了一下,发现安装KB3008923这个补丁可以解决问题,于是从下面这个网址下载安装,但还是 无法解决问题: http://www.microsoft.com/zh-CN/download/details.aspx?id=45134 后来仔细看了一下页面说明,这个补丁...

    解决IE10以上版本doPostBack未定义

    .Net4.0下ASP.NET在IE10以上版本访问的时候,遇到分页或者控件回发的时候会提示doPostBack未定义,这个补丁是用来在服务器端修正这个问题,安装完需要重启。如不想在服务器修正,可以看...

    IE 助手

    但不一定会解决所有的问题。使用时要把上面3个的功能结合起来使用更好一些。 6.手机短信 IE 助手允许用户发送免费或者收费的手机短信,对于免费免注册手机短信,用户不需 要任何注册,只需要对方手机号码即可...

    LR9.5浏览器IE8补丁

    解决Loadrunner9.5不支持IE8的问题。同时需要说明的是,此补丁不适用于Win7系统

    解决windows xp因为ssl证书问题无法上网的补丁

    解决windows xp因为ssl证书问题无法上网的补丁

    windows7系统安装更新补丁提示0x80240037错误如何解决

    但是难免会碰到一些问题,比如有不少win7 32位系统用户在安装更新补丁的时候,提示0x80240037错误代码,该怎么办呢,经过分析是由于安装不兼容导致的,为此小编这就给大家带来windows7系统安装更新补丁提示0x...

    解决.Net4.0的网站在IE10以上版本出现_doPostBack未定义

    .Net4.0下ASP.NET在IE10以上版本访问的时候,遇到分页或者控件回发的时候会提示doPostBack未定义,这个补丁是用来在服务器端修正这个问题,安装完需要重启。如不想在服务器修正,可以看 ...参考在客户端修正(就是指定...

    桌面项目中IE恢复文件

    在桌面属性-桌面-自定义桌面-桌面项目常规只有:我的文档、我的电脑、网上邻居,唯独缺少Internet Explorer的勾选项。...解决问题的方法是,需要重新恢复未安装补丁之前的shell32.dl 文件,它在WINDOWS\system32下。

    IE 6文件上传慢终极解决方案

    微软官方说明 http://support.microsoft.com/kb/329781/en-us#top

    IE 选择符的4095限制

    去年曾总结了《IE对CSS样式表的限制和解决方案》中限制的第4条写道“一个CSS文件的不能超过288kb?”,这是一个疑问句,当时没有重现出来且参考来自Internet Explorer CSS File Size Limit。今天终于看到了IE在CSS上...

    windows 2008 R2 kb2483177补丁(X64)

    修复在Windows Server 2008 R2服务器启用桌面体验功能的计算机上不能播放 H.264 视频文件或 AAC 音频文件,解决Windows Sever 2008 R2上的IE9不能打开HTML5中的音视频文件错误

    IE不能打开新链接,简单修复工具

    安装SQL如提示挂起导入本注册表可解决.reg IE不能打开新链接修复.cmd 解决IIS无法调试的问题.cmd 因装了KB905474正版验证补丁进系统受阻导入本注册表可破解.reg (还有别的,不全写了)

    JT—IE修复精灵

    软件名称:JT—IE修复精灵 ...《JT—IE修复精灵》软件就是针对目前上网用户常遇到的这种问题而编写的,解决了你上网之忧。该软件使用简便、功能全、占用系统资源小、可后运行等特点,是上网良好的辅助工具。

    IE8浏览器 上海绿茶版

    这个解决我网吧维护大问题。感谢CSDN发布者 某些 XP SP2 需要安装 IE8补丁-WindowsXP-KB932823-v3-x86-CHS 才能安装IE8浏览器。

    ewebeditor V5.5破解版 兼容IE8 支持word导入|远程|本地上传

    而且不需要下载控件,还有关于有的ewebeditor编辑器上传限制200KB,那个是IIS问题 和编辑器没有关系,可以修改下IIS。 IIS 上传限制问题完美解决: S 6 出于安全考虑, 默认最大请求200K(也即最大提交数据限额为200...

    WIN7 32位 IE11 升级前置补丁

    WIN7 32位 IE11 升级前置补丁,解决大家很多由于不兼容造成的困扰

Global site tag (gtag.js) - Google Analytics