`
realeasy
  • 浏览: 3257 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

初来此处,给大家带来一个奇怪的ie bug,兼对比ie和ff ajax处理方式

阅读更多
开发中遇到的,苦恼了我2天的时间,终于搞定了。好了废话不说了,看一个实例吧。初次发帖可能格式有点问题。

<html>
<head>
<script language="javascript" src="mootools.js" type="text/javascript"></script>
</head>
<body onunload="a.cancel();b.cancel();c.cancel()">
<a href="/index.html" target="_blank">123</a>
</body>
<script>

var a=new Ajax('test.php', {method: 'get',onComplete:go}).request();//new ajax是mootools里面对ajax封装的类,可以用大家自己的替代.
var b=new Ajax('test.php', {method: 'get',onComplete:go}).request();
var c=new Ajax('test.php', {method: 'get',onComplete:go}).request();

function go(html){
	alert(html);
}
</script>
</html>


上面这个是html文件


<?php
	sleep(5);
	echo "alert(0)";
?>


php文件,不知道为啥出现了两个一样的,大家拷贝一段就行了,你也可以用servlet改写一下,反正很简单,就是让他老人家休息一下,然后给个字符串就行了。

把html和php放在一起,然后加上mootools.js或者你自己的ajax实现。然后配置好apache,我是放在根目录了,就是127.0.0.1大家随便放(只要你能找到就ok)。

Q1.好了先打开一个页面,你会发现页面首先呈现123。然后5秒后弹出2个alert,10秒中弹出1个alert。这是一次个问题,为啥这样呢?ajax不是异步调用的吗?firefox什么样呢?
A1.ie是傻瓜式,就是无论啥ajax请求一样或者不一样的,他也一次发两个(当然你发送大于等于2个时),他不会同时发送两个,其他的要等到那两个返回,再发,不过还是最多一次两个。
   ff是智能式,他的原理是如果请求是相同的,他会一个一个发,如果是不同的他会一起发。

Q2.现在在刚才的页面基础上点那个123的链接(在新窗口中打开本页),然后在5秒中之内关闭窗口,你会发现什么??试过再往下看。
























Boom,ie完蛋了或者说你这个域完蛋了,看看是不是再访问127.0.0.1的域都是白页了,你只有把同一进程的ie关掉才能恢复正常。
A2.这是为啥呢?据我分析ie发出ajax请求后,他是不见棺材不掉泪的类型,它默认是一直等待,就算你把那个ie关掉,只要同一进程的ie还开着,他就一直等,其实等来也没有结果了(这是个人揣测,具体ie咋实现的微软好像没有说,要不就是说了我没找到.......)。咋办呢?就这个问题困扰我好久,后来发现了,可以abort掉请求的,在mootools.js里面用cancel函数在XHR里面。你只需要这样加入
window.attachEvent('onunload',function(){a.cancel();});
window.attachEvent('onunload',function(){b.cancel();});
window.attachEvent('onunload',function(){c.cancel();});
就ok了,如果你没用mootools.js你使用
req.abort();//req是你的ie中ajax请求对象

这样这个问题就可以解决了,满怀欣喜的用了这个方法,结果在生产环境中发现还是出现白页现象,忽然有种从天堂到地狱的感觉。接着我继续分析。

Q3.在你的html代码<body>中加入这个<img src="/test.php" id="img"/>。然后继续刚才的操作吧,呵呵,发现啥了,白页又出来了吧。咋解决呢?
A3.最后我分析因为照片没有加载完,所以不会调用onunload方法,最后找到了onbeforeunload方法,这次终于解决了这个问题。



总结:一个看似很奇怪的生产环境中出现白页(ie不请求服务器的现象)背后却有这么多技术点,不过ff就不会有这bug,总之ie 是king of the bug and king of the leak。
分享到:
评论

相关推荐

    iebug总结jar包

    在IT行业中,尤其是在Web开发领域,IE(Internet Explorer)浏览器,尤其是早期版本如IE6,因其独特的渲染机制和大量的兼容性问题,给开发者带来了不少挑战。"iebug总结jar包"是一个专门针对这些问题的资源集合,它...

    ie特有bug文档

    ### IE特有Bug知识点解析 #### 一、概述 Internet Explorer(简称IE)...通过以上详尽的分析和解决方案,开发者可以更好地理解和处理IE浏览器特有的兼容性问题,从而提高网站在不同浏览器环境下的兼容性和用户体验。

    ie6BUG解决方案

    作为一款已过时的浏览器,它在处理CSS(层叠样式表)、JavaScript和其他Web技术时存在诸多不一致性和漏洞,给开发者带来了不少挑战。本文将深入探讨针对IE6的一个常见问题——透明效果的实现及其相关的修复策略。 ...

    我发现一个IE8的Bug

    标题中的“我发现一个IE8的Bug”提示我们,这个压缩包可能包含有关Internet Explorer 8浏览器的一个已知或新发现的软件缺陷的信息。在描述中,我们只得到了一个指向博客文章的链接,该链接可能提供了关于这个Bug的...

    9个最常见IE的Bug及其fix

    在CSS布局中,将一个元素水平居中是最基本的需求之一。通常,通过设置`margin: auto;`可以轻松实现这一点。然而,在IE6中,这一操作往往会导致布局错乱,元素不会正确居中。 **解决方案**:为了解决这个问题,可以...

    IEbug、IE6页面问题

    IEbug、IE6页面问题、IE6样式问题

    ie和ff兼容性大集合

    - **问题描述**:IE 和 FF 对于某些元素的默认样式处理不同,有时需要为不同的浏览器编写不同的 CSS 规则。 - **解决方案**: - 了解各种浏览器的默认样式差异,尽可能统一初始样式表。 - 使用条件注释或特定...

    css常见的bug(ie)

    在IE6中,如果一个浮动元素设置了margin属性,可能会导致实际的外边距比预期的要宽一倍。为了解决这个问题,可以将浮动元素的`display`属性设置为`inline`。 2. **最小高度的处理**: IE6不支持`min-height`属性...

    AD-IEBUG

    标题“AD-IEBUG”可能指的是一个针对Active Directory(AD)和Internet Explorer(IE)的错误或漏洞的调试工具或技术。在这个场景中,“AD”是微软Windows操作系统中的目录服务,用于存储和管理网络资源,而“IE”是...

    莫名其妙的IE 3像素Bug

    这个问题的根本原因在于IE浏览器对盒模型的处理方式与大多数现代浏览器(如Firefox、Chrome和Safari)不同。在IE中,传统盒模型(即`box-sizing: content-box`)会将边框和内填充计算在元素的总宽度和高度内,而其他...

    ie6-ie7 dom渲染bug demo

    ie6-ie7 dom渲染bug demo

    IE又一个让人吐血的BUG: 关于 table的position 和 select

    标题中的“IE又一个让人吐血的BUG: 关于 table的position 和 select”指的是在Internet Explorer(IE)浏览器中,开发者遇到的一个与HTML表格(table)的定位(position)属性和下拉选择框(select)相关的bug。...

    jQuery ajaxFileUpload.js 插件 ie9 下bug 修复

    总的来说,`jQuery ajaxFileUpload.js 插件 ie9 下bug 修复`这个主题涵盖了前端开发中的重要知识点,包括浏览器兼容性、异步文件上传、Ajax交互和事件处理等。理解和解决这些问题对于提升老旧浏览器下的用户体验至关...

    IE9 IE8 ajax跨域问题的快速解决方法

    在Web开发中,跨域(Cross-Origin)是一个常见的问题,特别是在使用Ajax技术进行异步数据交互时。Ajax跨域指的是由于浏览器的同源策略限制,JavaScript不能从一个域名下的网页去请求另一个域名下的资源。IE9和IE8...

    ie6bug问题解决

    在IT行业中,尤其是在Web开发领域,IE6(Internet Explorer 6)因其众多独特的bug和兼容性问题而闻名。这个压缩包文件"ie6bug"显然专注于解决与IE6相关的技术挑战。下面,我们将深入探讨IE6中的常见问题以及解决策略...

    ajax.dll 配置 ajax局部无刷新 ajax 与不处理

    ajax.dll 配置 ajax局部无刷新 ajax 异步处理

    非常经典的ie bug汇总,页面之王的代表作

    在IE6、IE7的某些模式下,如果设置了文字的宽度和行高,并且高度小于文字的总高度,这些浏览器可能会自动赋予一个比设定值更高的高度,导致元素扩展错误。例如,在标准模式下,`line-height:180%`可能会超出设定的`...

    formValidate ajax bug修改

    在描述中提到的修改`formValidate`原码来解决`ajax`验证bug,这意味着可能遇到了以下几种常见问题: 1. **异步问题**:`ajax`请求是异步的,如果在验证函数中没有正确处理这个特性,可能会导致验证结果返回时,表单...

    IE6特有bug兼容性问题整理

    ### IE6特有bug兼容性问题整理 #### 1. 浮动(float)与相邻非浮动元素的表现差异 - **问题描述**: 在不同浏览器中,对于`float`元素和相邻非`float`元素的处理方式存在差异。具体表现为,在IE6中,当一个元素设置...

Global site tag (gtag.js) - Google Analytics