2010-05-24 77 views
1

不幸的是,這個錯誤不會發生在我的應用程序之外!懶惰加載Javascript,對象不是從IE8緩存創建的

情景

的index.php

<?php 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Last-Modified: '.gmdate('D, d M Y H:i:s').'GMT'); 
header('Cache-Control: no-cache, must-revalidate'); 
header('Pragma: no-cache'); 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
<title>Lazy loader</title> 
</head> 
<body> 
... 
<script type="text/javascript" src="internal.js"></script> 
... 
</body> 
</html> 

internal.js

myApp = { 
    timerHitIt: false, 
    hitIt: function() { 
     if (arguments.callee.done) { return; } 
     arguments.callee.done = true; 
     if (myApp.timerHitIt) { clearInterval(myApp.timerHitIt); } 
     var elt = document.createElement("script"); 
     elt.async = true; 
     elt.type = "text/javascript"; 
     elt.src = "external.js"; 
     elt.onload = elt.onreadystatechange = function() { alert(typeof(something)); }; 
     document.body.appendChild(elt); 
    } 
}; 
if (document.addEventListener) { document.addEventListener("DOMContentLoaded", myApp.hitIt, false); } 
/*@cc_on @*/ 
/*@if (@_win32) 
    document.write("<script id=__ie_onload defer src="+((location.protocol == "https:") ? "//:" : "javascript:void(0)")+"><\/script>"); 
    document.getElementById("__ie_onload").onreadystatechange = function() { 
     if (this.readyState == "complete") { myApp.hitIt(); } 
    }; 
/*@end @*/ 
if (/WebKit/i.test(navigator.userAgent)) { 
    timerHitIt = setInterval(function() { 
     if (/loaded|complete/.test(document.readyState)) { myApp.hitIt(); } 
    }, 10); 
} 
window.onload = myApp.hitIt; 

external.js

something = {}; 
alert(true); 

有效再sults是

  • 未定義 - >真 - >對象(±新的請求)
  • 真實 - >對象(±緩存的JavaScript)

但有時候,按F5的時候,我得到

  • 真實 - >未定義

有沒有人有一個線索,爲什麼警報(真)是前已經完成,但沒有設置?

回答

0

解決方案,甚至修復的Internet Explorer 6

window.something = {};