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 相关文章推荐
Javascript实现关联数据(Linked Data)查询及注意细节
Feb 22 Javascript
javascript打印大全(打印页面设置/打印预览代码)
Mar 29 Javascript
jquery实现pager控件示例
Apr 09 Javascript
javascript中使用正则计算中文长度的例子
Apr 29 Javascript
javascript教程:关于if简写语句优化的方法
May 17 Javascript
jQuery实现表单提交时判断的方法
Dec 13 Javascript
详解JavaScript中双等号引起的隐性类型转换
May 30 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
Aug 01 Javascript
Angular的事件和表单详解
Dec 26 Javascript
react开发中如何使用require.ensure加载es6风格的组件
May 09 Javascript
微信小程序实现二维码签到考勤系统
Jan 16 Javascript
vue学习笔记之slot插槽基本用法实例分析
Feb 01 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
域名和cookie问题(域名后缀)
2012/10/10 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
PHP结合jQuery实现找回密码
2015/07/22 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
XENON基于JSON变种
2010/07/27 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
jQuery中show与hide方法用法示例
2016/09/16 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
vue写一个组件
2018/04/09 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
Python操作MySQL简单实现方法
2015/01/26 Python
详解Python中用于计算指数的exp()方法
2015/05/14 Python
Python定时执行之Timer用法示例
2015/05/27 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
python2.7到3.x迁移指南
2018/02/01 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
如何使用python传入不确定个数参数
2020/02/18 Python
PyTorch中Tensor的数据类型和运算的使用
2020/09/03 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
协议书格式
2014/04/23 职场文书
先进事迹材料范文
2014/12/29 职场文书
拾金不昧表扬稿大全
2015/05/05 职场文书
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis