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使用函数绑定技术改变事件处理程序的作用域
Dec 26 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
Jan 21 Javascript
JavaScript对内存分配及管理机制详细解析
Nov 11 Javascript
两个select多选模式的选项相互移动(示例代码)
Jan 11 Javascript
利用CSS3在Angular中实现动画
Jan 15 Javascript
使用伪命名空间封装保护独自创建的对象方法
Aug 04 Javascript
node中使用es5/6以及支持性与性能对比
Aug 11 Javascript
JavaScript+CSS相册特效实例代码
Sep 07 Javascript
JavaScript读写二进制数据的方法详解
Sep 09 Javascript
Vue弹出菜单功能的实现代码
Sep 12 Javascript
js实现前面自动补全位数的方法
Oct 10 Javascript
jquery实现动态改变css样式的方法分析
May 27 jQuery
用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 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
深入分析PHP设计模式
2020/06/15 PHP
JavaScript 题型问答有答案参考
2010/02/17 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
JS与jQuery遍历Table所有单元格内容的方法
2015/12/07 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
2016/07/18 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
angular4+百分比进度显示插件用法示例
2019/05/05 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
vue 组件简介
2020/07/31 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
python障碍式期权定价公式
2019/07/19 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
《再见了,亲人》教学反思
2014/02/26 职场文书
房屋委托书范本
2014/04/04 职场文书
董事长秘书工作职责
2014/06/10 职场文书
判缓刑人员个人思想汇报
2014/10/10 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
python tqdm用法及实例详解
2021/06/16 Python