IE6的BUG:window.onload裡用innerHTML建立的img會忽略本機快取

來源:互聯網
上載者:User

  今天遇到這麼一個問題,IE6,在window.onload裡用innerHTML動態插入圖片,結果這些圖片都忽略了本機快取策略,發出N多個304請求。

  於是乎我換了一個寫法,在innerHTML裡不使用img,而是在innerHTML新添加的HTML標籤中使用CSS樣式來匯入圖片,但問題依舊,IE6 還是狂發304請求。

  在網上搜尋到了emu一篇BLOG說innerHTML建立的 img 都會忽略本機快取,範例程式碼如下。那原因真的就是 innerHTML 建立的 img 忽略緩衝嗎?未必!

<html>
<body>
    <div id="dd"></div>
</body>

<script type="text/javascript">...
var a = new Array(101);
var s = "<img alt='' src='http://www.baidu.com/img/logo.gif' /><br/>";

window.onload = function()
...{
    document.getElementById("dd").innerHTML = a.join(s);
}
</script>
</html>

運行上述代碼,監控HTTP請求時確實是在狂發304請求,但是我的 MzTreeView 裡也是使用 innerHTML 大量建立 <img> 也沒有發現本機快取失效,所以根本原因並不在 innerHTML 上,而是在 window.onload 裡。同樣的代碼改成如下代碼再運行試試:

 

<html>
<body>
  <div id="dd"></div>
</body>

<script type="text/javascript">...
var a = new Array(101);
var s = "<img alt='' src='http://www.baidu.com/img/logo.gif' /><br/>";
document.getElementById("dd").innerHTML = a.join(s);
</script>
</html>

 

再用HTTP請求監視軟體看看!

IE6裡確實存在動態建立的 img 忽略本機快取的BUG,但是這個BUG不是出在 innerHTML 上而是在 window.onload 這個事件裡。這個BUG在IE7裡已經解決了。

BUG的修正方案:
  一是象上面的例子裡那樣把指令碼放到後面直接運行;
  二是在 window.onload 裡再用 setTimeout 順延強制。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.