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

 更新时间:2007年07月21日 00:00:00   作者:  
今天是发现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

相关文章

  • ES6 Set结构的应用实例分析

    ES6 Set结构的应用实例分析

    这篇文章主要介绍了ES6 Set结构的应用,结合实例形式分析了ES6 set结构的功能、特点、常见用法及相关操作注意事项,需要的朋友可以参考下
    2019-06-06
  • 关于微信中a链接无法跳转问题

    关于微信中a链接无法跳转问题

    微信页面开发时,各个主页之间的跳转,完全是通过a链接进行的,但是来回跳转几次,再次从其他主页面跳回首页的时候,微信头部出现了跳转加载进度条,但是就是不跳转,也没有任何反应,怎么回事呢?下面小编给大家解答下
    2016-08-08
  • 页面定时刷新(1秒刷新一次)

    页面定时刷新(1秒刷新一次)

    页面定时刷新的示例想必大家也见到不少,在本文将为大家介绍的是,如何实现1秒刷新一次,感兴趣的朋友可以了解下本文
    2013-11-11
  • 一个JavaScript防止表单重复提交的实例

    一个JavaScript防止表单重复提交的实例

    防止重复表单提交的方法有很多,本文使用JavaScript来实现防止表单重复提交,很简单,但很实用,新手朋友们不要错过
    2014-10-10
  • 捕获浏览器关闭、刷新事件不同情况下的处理方法

    捕获浏览器关闭、刷新事件不同情况下的处理方法

    在做一些关于会员在线的问题时,往往我们要根据览器是否关闭来判断用户是否下线,然后再从session和application中将此用户移除,下面与大家分享下具体的捕捉方法
    2013-06-06
  • js判断变量是否空值的代码

    js判断变量是否空值的代码

    判断变量是否空值undefined, null, '', false, 0, [], {} 均返回true,否则返回false
    2008-10-10
  • js判断文件格式及大小的简单实例(必看)

    js判断文件格式及大小的简单实例(必看)

    下面小编就为大家带来一篇js判断文件格式及大小的简单实例(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • TypeScript 中使用 getter 和 setter的方法

    TypeScript 中使用 getter 和 setter的方法

    这篇文章主要介绍了TypeScript 中如何使用 getter 和 setter, getter使我们能够将属性绑定到在访问属性时调用的函数,而 setter 将属性绑定到在尝试设置属性时调用的函数,需要的朋友可以参考下
    2023-04-04
  • 微信小程序判断手机号是否合法的实例代码

    微信小程序判断手机号是否合法的实例代码

    我们在微信小程序开发的时候,手机号的验证是经常需要操作的,那么如何验证手机号呢?这篇文章主要给大家介绍了关于微信小程序判断手机号是否合法的相关资料,需要的朋友可以参考下
    2021-09-09
  • JS获取下拉框显示值和判断单选按钮的方法

    JS获取下拉框显示值和判断单选按钮的方法

    这篇文章主要介绍了JS获取下拉框显示值和判断单选按钮的方法,实例分析了javascript针对html下拉框及单选按钮的相关操作技巧,需要的朋友可以参考下
    2015-07-07

最新评论