Heim >Web-Frontend >js-Tutorial >IE 缓存策略的BUG的解决方法_javascript技巧

IE 缓存策略的BUG的解决方法_javascript技巧

WBOY
WBOYOriginal
2016-05-16 19:11:21961Durchsuche

今天是发现bug的高产期。

IE在解析innerHTML的时候居然会忽略Cache策略,简单的重复加载图片。请看以下代码:




<script> <BR><!-- <BR>var st="<img src=\"http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif\" alt="IE 缓存策略的BUG的解决方法_javascript技巧" >" <BR>var ar = new Array(101); <BR>window.onload=function(){ <BR> document.body.innerHTML = ar.join(st); <BR>} <BR>//--> <BR></script>



保存到本地作为一个htm文件,然后用IE打开(允许脚本运行),然后用http监视工具可以看到,IE发起了100个请求,一个都不cache!

在FireFox下面就没有问题,只发起一个请求。
复制代码 代码如下:

用这段代码可以解决这个问题 

 
 
<script> <BR>var imageholder=new Image() <BR>imageholder.src="http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif" <BR></script> 
 
 
 
<script> <BR>document.getElementById("div1").innerHTML = <BR>"<img id='p1' alt="IE 缓存策略的BUG的解决方法_javascript技巧" ><img id='p2' alt="IE 缓存策略的BUG的解决方法_javascript技巧" ><img id='p3' alt="IE 缓存策略的BUG的解决方法_javascript技巧" >"; <BR>document.getElementById("p1").src=imageholder.src; <BR>document.getElementById("p2").src=imageholder.src; <BR>document.getElementById("p3").src=imageholder.src; <BR></script> 
 
 

复制代码 代码如下:

这个bug的官方描述见: 

http://support.microsoft.com/default.aspx?scid=kb;en-us;319546 

此外 http://www.bazon.net/mishoo/Articles/msie/958/ 指出background-image会带来一样的问题。 

ms的官方解决方案是象这样: 

 
 
 

<script> <BR><!-- <BR>var st="<img src=\"http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif" alt="IE 缓存策略的BUG的解决方法_javascript技巧" >http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif\">" <BR>var ar = new Array(101); <BR>function test(){ <BR>document.getElementById("d").innerHTML = ar.join(st); <BR>document.getElementById("d").style.display="block"; <BR>} <BR>setTimeout("test()",1000); <BR>//--> <BR></script> 
IE 缓存策略的BUG的解决方法_javascript技巧http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif">
 
 
 

如果不怕麻烦的话,这样做可以更快一点点,也更保险: 

 
 
 
<script> <BR><!-- <BR>var st="<img src=\"http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif" alt="IE 缓存策略的BUG的解决方法_javascript技巧" >http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif\">" <BR>var ar = new Array(101); <BR>function test(){ <BR>document.getElementById("d").innerHTML = ar.join(st); <BR>document.getElementById("d").style.display="block"; <BR>} <BR>//--> <BR></script> 
IE 缓存策略的BUG的解决方法_javascript技巧http://imgcache.qq.com/qzone/item/orig/11/3179_5.gif" onreadystatechange="if(readyState=='complete')setTimeout('test()',0)">
 
 
 

更多方法:
http://www.blogjava.net/emu/archive/2006/03/01/33082.html
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn