IE 缓存策略的BUG的解决方法


Posted in Javascript onJuly 21, 2007

今天是发现bug的高产期。

IE在解析innerHTML的时候居然会忽略Cache策略,简单的重复加载图片。请看以下代码:

<HTML>
<HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
var st="<img src=\"http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif\">"
var ar = new Array(101);
window.onload=function(){
    document.body.innerHTML = ar.join(st);
}
//-->
</SCRIPT>
</BODY>
</HTML>

保存到本地作为一个htm文件,然后用IE打开(允许脚本运行),然后用http监视工具可以看到,IE发起了100个请求,一个都不cache!

在FireFox下面就没有问题,只发起一个请求。

用这段代码可以解决这个问题  <html>  
<head>  
<script language=javaScript>  
var imageholder=new Image()  
imageholder.src="http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif"  
</script>  
</head>  
<body>  
<div id="div1"></div>  
<script language=javaScript>  
document.getElementById("div1").innerHTML =  
"<img id='p1'><img id='p2'><img id='p3'>";  
document.getElementById("p1").src=imageholder.src;  
document.getElementById("p2").src=imageholder.src;  
document.getElementById("p3").src=imageholder.src;  
</script>  
</body>  
</html> 

这个bug的官方描述见:  http://support.microsoft.com/default.aspx?scid=kb;en-us;319546  
此外 http://www.bazon.net/mishoo/Articles/msie/958/ 指出background-image会带来一样的问题。  
ms的官方解决方案是象这样:  
<HTML>  
<HEAD>  
<BODY>  
<SCRIPT LANGUAGE="JavaScript">  
<!--  
var st="<img src=\"http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif">http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif\">"  
var ar = new Array(101);  
function test(){  
document.getElementById("d").innerHTML = ar.join(st);  
document.getElementById("d").style.display="block";  
}  
setTimeout("test()",1000);  
//-->  
</SCRIPT>  
<div id="d"><img src="http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif">http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif"></div>  
</BODY>  
</HTML>  
如果不怕麻烦的话,这样做可以更快一点点,也更保险:  
<HTML>  
<HEAD>  
<BODY>  
<SCRIPT LANGUAGE="JavaScript">  
<!--  
var st="<img src=\"http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif">http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif\">"  
var ar = new Array(101);  
function test(){  
document.getElementById("d").innerHTML = ar.join(st);  
document.getElementById("d").style.display="block";  
}  
//-->  
</SCRIPT>  
<div id="d"><img src="http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif">http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif" onreadystatechange="if(readyState=='complete')setTimeout('test()',0)"></div>  
</BODY>  
</HTML> 

更多方法:
http://www.blogjava.net/emu/archive/2006/03/01/33082.html
Javascript 相关文章推荐
使用PHP+JQuery+Ajax分页的实现
Apr 23 Javascript
jquery中的事件处理详细介绍
Jun 24 Javascript
JS获取时间的方法
Jan 21 Javascript
JavaScript中的类与实例实现方法
Jan 23 Javascript
JavaScript实现的SHA-1加密算法完整实例
Feb 02 Javascript
Bootstrap布局组件应用实例讲解
Feb 17 Javascript
jQuery联动日历的实例解析
Dec 02 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
Jun 30 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
Feb 11 Javascript
VUE中使用MUI方法
Feb 12 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
Mar 06 Javascript
Javascript Symbol原理及使用方法解析
Oct 22 Javascript
用JS实现的一个include函数
Jul 21 #Javascript
代码精简的可以实现元素圆角的js函数
Jul 21 #Javascript
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
Jul 21 #Javascript
用javascript实现读取txt文档的脚本
Jul 20 #Javascript
符合W3C网页标准的iframe标签的使用方法
Jul 19 #Javascript
javascript实现unicode和字符的互相转换
Jul 18 #Javascript
js实现的网页颜色代码表全集
Jul 17 #Javascript
You might like
自动生成文章摘要的代码[PHP 版本]
2007/03/20 PHP
用PHP连接MySQL代码的参数说明
2008/06/07 PHP
php xml文件操作实现代码(二)
2009/03/20 PHP
php 无限级数据JSON格式及JS解析
2010/07/17 PHP
PHP array_multisort() 函数的深入解析
2013/06/20 PHP
WordPress中获取指定分类及其子分类下的文章数目
2015/12/31 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
jQuery scrollFix滚动定位插件
2015/04/01 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
react国际化化插件react-i18n-auto使用详解
2020/03/31 Javascript
JavaScript DOM常用操作代码汇总
2020/07/03 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
世界上最好的帽子:Tilley
2016/11/27 全球购物
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
spring cloud 配置中心native配置方式
2021/09/25 Java/Android
redis 解决库存并发问题实现数量控制
2022/04/08 Redis