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 相关文章推荐
IE6下JS动态设置图片src地址问题
Jan 08 Javascript
javascript Array数组对象的扩展函数代码
May 22 Javascript
javascript中2个感叹号的用法实例详解
Sep 04 Javascript
javascript实现禁止复制网页内容汇总
Dec 30 Javascript
详细讲解JavaScript中的this绑定
Oct 10 Javascript
Angular路由简单学习
Dec 26 Javascript
JS轮播图中缓动函数的封装
Nov 25 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
Feb 22 Javascript
react+redux的升级版todoList的实现
Dec 18 Javascript
基于JS实现父组件的请求服务过程解析
Oct 14 Javascript
JS PHP字符串截取函数实现原理解析
Aug 29 Javascript
JS相册图片抖动放大展示效果的示例代码
Jan 29 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
德生PL660的电路分析和打磨
2021/03/02 无线电
新版PHP极大的增强功能和性能
2006/10/09 PHP
学习使用curl采集curl使用方法
2012/01/11 PHP
PHP的基本常识小结
2013/07/05 PHP
php的$_FILES的临时储存文件与回收机制实测过程
2013/07/12 PHP
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
用jscript启动sqlserver
2007/06/21 Javascript
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
简单实现python收发邮件功能
2018/01/05 Python
python-opencv颜色提取分割方法
2018/12/08 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
Django xadmin安装及使用详解
2020/10/26 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
耐克亚太地区:Nike APAC
2019/12/07 全球购物
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
Lucene推荐的分页方式是什么?
2015/12/07 面试题
网站开发实习生的自我评价
2013/12/11 职场文书
高分子材料与工程专业个人求职信
2013/12/15 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
黄金酒广告词
2014/03/21 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
施工工地安全标语
2014/06/07 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书