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 相关文章推荐
了解jQuery技巧来提高你的代码
Jan 08 Javascript
javascript动态加载二
Aug 22 Javascript
微信企业号开发之微信考勤百度地图定位
Sep 11 Javascript
js实现右键自定义菜单
Dec 03 Javascript
原生js实现查询天气小应用
Dec 09 Javascript
原生JS实现跑马灯效果
Feb 20 Javascript
vue实现单选和多选功能
Aug 11 Javascript
canvas基础绘制-绚丽倒计时的实例
Sep 17 Javascript
不得不知的ES6小技巧
Jul 28 Javascript
详解javascript设计模式三:代理模式
Mar 25 Javascript
angular4+百分比进度显示插件用法示例
May 05 Javascript
Vue数字输入框组件示例代码详解
Jan 15 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编程中尝试程序并发的几种方式总结
2016/03/21 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
AngularJS ng-app 指令实例详解
2016/07/30 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
微信小程序生成分享海报方法(附带二维码生成)
2019/03/29 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
Python中的Numpy入门教程
2014/04/26 Python
Python中操作MySQL入门实例
2015/02/08 Python
详解python调用cmd命令三种方法
2019/07/08 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
Python Collatz序列实现过程解析
2019/10/12 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
英国领先的游戏零售商:GAME
2019/09/24 全球购物
应聘医学检验人员自荐信
2013/09/27 职场文书
课程设计心得体会
2013/12/28 职场文书
入党自荐书范文
2014/03/09 职场文书
学习2014年全国两会心得体会
2014/03/12 职场文书
酒店管理求职信范文
2014/04/06 职场文书
工程项目经理任命书
2014/06/05 职场文书
个人租房协议书(范本)
2014/10/14 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书
Python进行区间取值案例讲解
2021/08/02 Python
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS