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 相关文章推荐
Chrome Form多次提交表单问题的解决方法
May 09 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
Jan 27 Javascript
js 数值转换为3位逗号分隔的示例代码
Feb 19 Javascript
jQuery实现tag便签去重效果的方法
Jan 20 Javascript
购物车前端开发(jQuery和bootstrap3)
Aug 27 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
Nov 12 Javascript
jQuery实现立体式数字动态增加(animate方法)
Dec 21 Javascript
原生JS实现导航下拉菜单效果
Nov 25 Javascript
angular bootstrap timepicker TypeError提示怎么办
Jun 13 Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
Feb 27 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
Mar 05 Javascript
JavaScript累加、迭代、穷举、递归等常用算法实例小结
May 08 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抓取页面与代码解析 推荐
2010/07/23 PHP
PHP输出XML到页面的3种方法详解
2013/06/06 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
2014/04/14 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
2014/07/08 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
JavaScript 继承详解(二)
2009/07/13 Javascript
利用javascript实现web页面中指定区域打印
2013/10/30 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
vue模式history下在iis中配置流程
2019/04/17 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
简明 Python 基础学习教程
2007/02/08 Python
python创建列表并给列表赋初始值的方法
2015/07/28 Python
Python部署web开发程序的几种方法
2017/05/05 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
python定向爬取淘宝商品价格
2018/02/27 Python
Python的多维空数组赋值方法
2018/04/13 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
一夜的工作教学反思
2014/02/08 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
2015年教学工作总结
2015/04/02 职场文书
国庆节新闻稿
2015/07/17 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
SQL Server代理:理解SQL代理错误日志处理方法
2021/06/30 SQL Server
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server
SQL Server删除表中的重复数据
2022/05/25 SQL Server