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权威指南 学习笔记之javascript数据类型
Sep 24 Javascript
浅析js设置控件的readonly与enabled属性问题
Dec 25 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
Feb 04 Javascript
js获得当前系统日期时间的方法
May 06 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
Aug 05 Javascript
老生常谈JavaScript 正则表达式语法
Aug 20 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Dec 15 Javascript
vue增删改查的简单操作
Jul 15 Javascript
JavaScript多态与封装实例分析
Jul 27 Javascript
vue根据进入的路由进行原路返回的方法
Sep 26 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
Apr 24 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
May 09 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文档更新介绍
2011/07/22 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
基于PHP制作验证码
2016/10/12 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
解决echarts 一条柱状图显示两个值,类似进度条的问题
2020/07/20 Javascript
python判断字符串是否包含子字符串的方法
2015/03/24 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
pytorch GAN伪造手写体mnist数据集方式
2020/01/10 Python
python爬取网易云音乐热歌榜实例代码
2020/08/07 Python
Python如何将模块打包并发布
2020/08/30 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
国际领先的学术出版商:Springer
2017/01/11 全球购物
计算机专业应届毕业生自荐信
2013/09/26 职场文书
项目经理的岗位职责
2013/11/23 职场文书
个人实用的自我评价范文
2013/11/23 职场文书
大学活动总结模板
2014/07/10 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
MySQL中连接查询和子查询的问题
2021/09/04 MySQL