2012-05-11 44 views
2

我使用此代碼加載我的JS異步的頭部未捕獲的ReferenceError:jQuery的不僅是定義在Chrome

<script type='text/javascript'> 
// Add a script element as a child of the body 
function downloadJSAtOnload() { 
var element4= document.createElement("script"); 
var element5= document.createElement("script"); 
element4.src="http:///ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" 
element5.src="http://yourjavascript.com/301810712121/slidemenu_horiz.js" 
element4.async=true; 
element5.async=true; 
document.body.appendChild(element4); 
document.body.appendChild(element5); 
} 
// Check for browser support of event handling capability 
if (window.addEventListener) 
window.addEventListener("load", downloadJSAtOnload, false); 
else if (window.attachEvent) 
window.attachEvent("onload", downloadJSAtOnload); 
else window.onload = downloadJSAtOnload; 
</script> 

在IE和Firefox工作正常,但在Chrome我有這樣的錯誤: 「未捕獲ReferenceError:jQuery未定義「

當我第二次(或第三次)刷新頁面時,腳本在Chrome中正常工作,請我需要知道如何解決此問題。

+0

如果你正在使用jQuery(文檔)在你的代碼。就緒時,它不會工作,因爲jQuery是連準備在window.load ,它仍在等待下載。因爲兩者都是異步的,所以如果slidemenu_horiz.js在jquery之前完成下載,你不會知道哪個會先完成下載。它不會工作,因爲jQuery尚未準備好......您可能想要查看labjs或requirejs或steal.js以異步加載ur js。 –

+0

感謝您的回覆,我可以指定誰先完成? – Jose

+1

爲什麼?爲什麼?你爲什麼要這樣加載jQuery?爲什麼不使用''包含像其他所有網站?只是問問。 – Sparky

回答

3

考慮您的需求,因爲我已經在過去成功地使用它我建議使用LABjs - http://labjs.com/

如前所述,有腳本裝載機可供選擇的負載 - LABjs側重於性能更而不包括其他許多額外功能,如requirejs(AMD加載程序),YepNope(基於特徵檢測的條件加載程序)等。如果您只需要異步加載腳本並控制執行順序,則LABjs是一個處理此問題的非常小的腳本。

使用LABjs,你會做以下,以複製上面的代碼:

<script src="js/libs/LAB.js"></script> 
<script> 
$LAB 
.script('http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js').wait() 
.script('http://yourjavascript.com/301810712121/slidemenu_horiz.js') 
.wait(function() { 
    // Check jQuery has loaded (could do this for the slider as well) 
    if (window.jQuery) { 
     // Do something with your slider 
    } 
}); 
</script> 

在上面的例子中,.wait()功能確保jQuery的已slidemenu_horiz.js之前執行的是 - 最後.wait()傳遞一個匿名函數作爲回調函數 - 在此範圍內,您可以測試所有內容已經加載,然後進行初始化。

這是值得檢查出所有的選項,至於腳本加載器去。真的有負載,每個都有不同的功能集,你可能會發現更好地解決你的問題。

編輯:添加腳本參考代碼示例LABjs爲清楚起見

相關問題