IE 緩存策略的BUG的解決方法
更新時(shí)間:2007年07月21日 00:00:00 作者:
今天是發(fā)現(xiàn)bug的高產(chǎn)期。
IE在解析innerHTML的時(shí)候居然會(huì)忽略Cache策略,簡(jiǎn)單的重復(fù)加載圖片。請(qǐng)看以下代碼:
<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>
保存到本地作為一個(gè)htm文件,然后用IE打開(允許腳本運(yùn)行),然后用http監(jiān)視工具可以看到,IE發(fā)起了100個(gè)請(qǐng)求,一個(gè)都不cache!
在FireFox下面就沒有問題,只發(fā)起一個(gè)請(qǐng)求。
用這段代碼可以解決這個(gè)問題
<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>
這個(gè)bug的官方描述見:
http://support.microsoft.com/default.aspx?scid=kb;en-us;319546
此外 http://www.bazon.net/mishoo/Articles/msie/958/ 指出background-image會(huì)帶來一樣的問題。
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>
如果不怕麻煩的話,這樣做可以更快一點(diǎn)點(diǎn),也更保險(xiǎn):
<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
IE在解析innerHTML的時(shí)候居然會(huì)忽略Cache策略,簡(jiǎn)單的重復(fù)加載圖片。請(qǐng)看以下代碼:
<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>
保存到本地作為一個(gè)htm文件,然后用IE打開(允許腳本運(yùn)行),然后用http監(jiān)視工具可以看到,IE發(fā)起了100個(gè)請(qǐng)求,一個(gè)都不cache!
在FireFox下面就沒有問題,只發(fā)起一個(gè)請(qǐng)求。
復(fù)制代碼 代碼如下:
用這段代碼可以解決這個(gè)問題
<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>
復(fù)制代碼 代碼如下:
這個(gè)bug的官方描述見:
http://support.microsoft.com/default.aspx?scid=kb;en-us;319546
此外 http://www.bazon.net/mishoo/Articles/msie/958/ 指出background-image會(huì)帶來一樣的問題。
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>
如果不怕麻煩的話,這樣做可以更快一點(diǎn)點(diǎn),也更保險(xiǎn):
<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
相關(guān)文章
JavaScript event對(duì)象整理及詳細(xì)介紹
這篇文章主要介紹了JavaScript event對(duì)象整理及詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-10-10微信小程序picker組件兩列關(guān)聯(lián)使用方式
這篇文章主要介紹了微信小程序picker組件兩列關(guān)聯(lián)使用方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10JavaScript垃圾回收機(jī)制原理總結(jié)深入探究
就像人類會(huì)產(chǎn)生垃圾一樣,程序運(yùn)行過程中也會(huì)產(chǎn)生垃圾,如果不及時(shí)回收輕則將會(huì)拖慢程序運(yùn)行,重則會(huì)導(dǎo)致系統(tǒng)崩潰,也就是所謂的內(nèi)存泄漏。所以垃圾回收非常必要2022-10-10從階乘函數(shù)對(duì)比Javascript和C#的異同
今天學(xué)習(xí)Javascript函數(shù),發(fā)現(xiàn)這完全是一個(gè)神奇的東西。跟我們平常所見強(qiáng)類型語言中的函數(shù)有好多不同。下面我們就從C#和JavaScript的兩個(gè)計(jì)算階乘的函數(shù)中比較兩者的異同2012-05-05Javascript中Object和Map之間的轉(zhuǎn)換方法
在許多編程語言中,Object和Map都是用于存儲(chǔ)鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于Javascript中Object和Map之間的轉(zhuǎn)換方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06javascript容錯(cuò)處理代碼(屏蔽js錯(cuò)誤)
本文主要介紹了javascript的容錯(cuò)處理代碼。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01cloneNode實(shí)現(xiàn)表格增加刪除效果
cloneNode實(shí)現(xiàn)表格增加刪除效果...2006-11-11