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 相关文章推荐
对联广告js flash激活
Oct 19 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
Apr 15 Javascript
javascript中interval与setTimeOut的区别示例介绍
Mar 14 Javascript
详解AngularJS中自定义过滤器
Dec 28 Javascript
Boostrap模态窗口的学习小结
Mar 28 Javascript
AngularJS基础 ng-include 指令示例讲解
Aug 01 Javascript
js获取上传文件的绝对路径实现方法
Aug 02 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
Aug 08 Javascript
js实现的简练高效拖拽功能示例
Dec 21 Javascript
JavaScript无阻塞加载和defer、async详解
Feb 26 Javascript
Vue实现移动端左右滑动效果的方法
Nov 27 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
Jul 27 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
如何给phpadmin一个保护
2006/10/09 PHP
PHP中文汉字验证码
2007/04/08 PHP
记录PHP错误日志 display_errors与log_errors的区别
2012/10/09 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
2013/06/28 PHP
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
JavaScript类和继承 constructor属性
2010/03/04 Javascript
jquery json 实例代码
2010/12/02 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
ExtJS判断IE浏览器类型的方法
2014/02/10 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
理解javascript模块化
2016/03/28 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
在实例中重学JavaScript事件循环
2020/12/03 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
Python实现快速多线程ping的方法
2015/07/15 Python
用python生成1000个txt文件的方法
2018/10/25 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
pygame实现飞机大战
2020/03/11 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
英国珠宝钟表和家居礼品精品店:David Shuttle
2018/02/24 全球购物
办加油卡单位介绍信
2014/01/09 职场文书
幼儿园英语教学反思
2014/01/30 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
2015大学生求职信范文
2015/03/20 职场文书
市场部岗位职责范本
2015/04/15 职场文书
研讨会通知
2015/04/27 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书