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 事件记录使用说明
Oct 20 Javascript
jQuery中innerWidth()方法用法实例
Jan 19 Javascript
使用jQuery实现返回顶部
Jan 26 Javascript
jquery实现界面无刷新加载登陆注册
Jul 30 Javascript
详解js中call与apply关键字的作用
Nov 21 Javascript
select下拉框插件jquery.editable-select详解
Jan 22 Javascript
JScript实现表格的简单操作
Aug 15 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
Nov 03 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
Apr 18 jQuery
vue中v-for循环给标签属性赋值的方法
Oct 18 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
Jan 18 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
Feb 21 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
业余方法DIY电子管FM收音机
2021/03/02 无线电
用PHP写的MySQL数据库用户认证系统代码
2007/03/22 PHP
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
php中将地址生成迅雷快车旋风链接的代码[测试通过]
2011/04/20 PHP
php获取后台Job管理的实现代码
2011/06/10 PHP
谈谈 PHP7新增功能
2015/12/16 PHP
laravel自定义分页效果
2017/07/23 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
犀利的js 函数集合
2009/06/11 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
javascript实现支持移动设备画廊
2015/08/24 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
Javascript基础回顾之(二) js作用域
2017/01/31 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
Python中优化NumPy包使用性能的教程
2015/04/23 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
智能旅行箱:Horizn Studios
2018/04/30 全球购物
大学英语演讲稿范文
2014/04/24 职场文书
计算机网络专业自荐信
2014/07/04 职场文书
会计专业自荐书
2014/07/08 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
Redis分布式锁Redlock的实现
2021/08/07 Redis
分享很少见很有用的SQL功能CORRESPONDING
2022/08/05 MySQL