2011-12-09 34 views
1

我有傳統的web應用程序的情況,我不能從HTML標記通過腳本標籤加載jquery.min.js ..所以我在另一現有的腳本文件如何做一個成功回調時加載JS從另一個腳本文件包括

var head = document.getElementsByTagName('head')[0]; 
var script = document.createElement('script'); 
script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'; 
script.type = 'text/javascript'; 
head.appendChild(script); 

問題與一些JS來加載它。當包括加載很慢..有jQuery函數 (也動態加載的頁面上),嘗試運行,找不到jQuery

有沒有一些跨瀏覽器在jquery.min.js包含文件完成從CDN下載之後調用jQuery ready函數的上述代碼中進行回調的方法?謝謝,

編輯:

使用Mike的代碼,這是正與onload事件幾乎所有的瀏覽器,除了 IE 8或更早..而這需要的onreadystatechange其他瀏覽器我想

JSFIDDLE HERE:

http://jsfiddle.net/BmyGC/

+0

http://unixpapa.com/js/dyna.html – rkw

回答

0

我會把我的基於jquery的代碼放在另一個單獨的javascript文件中,並以與加載jquery.min.js完全相同的方式加載該文件。只需在jquery.min.js之後立即執行。這應該工作。

編輯

好了,因爲不工作,試試這個:

function jqChecker() 
{ 
    if (! jQuery) 
    { 
    setTimeout(jqChecker, 500); // adjust as needed. 
    } 
    else 
    { 
    // insert code to dynamically load your external js file here 
    } 
} 
jqChecker(); 
+0

現在我看着這個在Chrome瀏覽器開發工具的時間表和第二(JQ相關)文件似乎加載jQuery.min.js完成之前..即使第二個開始以後..第二O ne贏得比賽。因此,需要啓動它當一個回調火災我想.. – stebbin45

+0

我不認爲真的有一種方式來獲得當外部文件被加載一個真正的回調 - 但是,我已經演示了一個貧民窟意味着做的同樣,在上面。 –

+0

有趣..我想過一個計時器..但似乎太不雅了。我現在嘗試它,因爲在此應用程序,第二個包含文件可以說是相當懶.. – stebbin45

2

嘗試

if(script.onreadystatechange) 
    script.onreadystatechange = function() 
    { 
     if(script.readyState == "complete" || script.readyState=="loaded") 
    { 
    script.onreadystatechange = false; 
     console.log("complete"); 
    } 
    } 
else 
{ 
    script.onload = function() 
    { 
     console.log("complete"); 
    } 
} 
+0

這將是偉大的,但我認爲這個功能不完全的跨瀏覽器或者也許我讀這個錯誤.. HTTP:/ /content.screencast.com/users/ssking44/folders/Snagit/media/b5e515a3-17bb-44b2-a8e1-369d52c9609b/12.09.2011-00.50.09.png – stebbin45

+0

如果不支持onreadystatechange,則執行「onload」事件 – Mike

+0

I得到的onload分公司工作,但不readyState的一部分。這 即使最新嘗試這個IE .. 'S =使用document.createElement( 「腳本」); s.src =「https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js」; (s.addEventListener){ \t s。的addEventListener( 「負載」,回調,FALSE); (s.readyState){ } else if(s.readyState){s.onreadystatechange = callback; } document.body.appendChild(s); 回調函數(){ //加載jQuery代碼 }' [MSDN鏈接](http://msdn.microsoft.com/en-us/library/hh180173(V = vs.85) .aspx) – stebbin45

相關問題