当前位置: 首页 > 图文教程 > 网络编程 > Javascript > IE 缓存策略的BUG的解决方法

Javascript
推荐js实现商品分类到搜索栏友好提示(人机交互)
attachEvent的使用方法与传递参数[IE|firefox]
用javascript实现鼠标框选
一个不错的动感导航菜单
JavaScript网页制作特殊效果用随机数
一段非常好的滑动门[可感应触发或点击触发]兼容IE7 IE6 FireFox Opera
js实现的的 文字自动''到google search框
JS值当前DIV的ID值的代码
在javascript中,如果删除二维数组中重复的元素
一个用js实现的页内搜索代码
不用MOUSEMOVE也能滑动啊
asp 的 分词实现代码
更正确的asp冒泡排序
用Javscript实现表单复选框的全选功能
向fckeditor编辑器插入指定代码的方法
javascript实现 在光标处插入指定内容
如何实现动态删除javascript函数
javascript父子通信
JS获取scrollHeight问题想到的标准问题
從博客網扣了一個效果出來

Javascript 中的 IE 缓存策略的BUG的解决方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 70 ::
收藏到网摘: n/a

今天是发现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