2012-06-09 38 views
3

有沒有人知道檢測jQuery庫是否已加載,並且在加載到DOM後是否將其追加並啓動腳本作爲後備解決方案的方法?檢測並追加jQuery,如果沒有加載純Javascript和回退

這裏是我的腳本:

if (typeof jQuery == 'undefined') { 
    // if jQuery Library is not loaded 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'; 
    document.body.appendChild(script); 
    startScript(); 
} else { 
    // cool, jQuery Library is loaded 
    startScript(); 
} 

function startScript() { 
    $.noConflict(); 
    jQuery(document).ready(function($){ 
    .... // my jquery code 
    }); 
} 

當然,上述追加正確的jQuery但因爲劇本追加後immidiately開始沒有做任何事情。對此有何暗示?

我很欣賞任何答案。謝謝!

回答

4

除了如您所說,您還可以在添加新script元素後立即致電startScript。相反,做一個setTimeout循環:

// ... 
document.body.appendChild(script); 
maybeStart(); 

maybeStart看起來是這樣的(不是if體內,函數的聲明是無效的存在):

function maybeStart() { 
    if (typeof jQuery === "undefined") { 
     setTimeout(maybeStart, 100); 
    } 
    else { 
     startScript(); 
    } 
} 

,檢查是否jQuery是加載如果沒有,等待十分之一秒並再次檢查。當找到jQuery時,它會調用您的startScript

你可能想在這裏放一個時間限制(如果jQuery從不加載,所以你不會永久循環)。

或者,您可以可以掛鉤script元素上的「加載」式事件,但其機制因瀏覽器而異。在某些瀏覽器上,它只是load,就像img元素一樣;在IE(至少舊版本)上,你必須使用readystatechange,並且在某些版本的IE上都可以工作。所以你必須保留一個標誌,以便你知道你是否已經解僱了你的腳本等等,以及......當你知道該腳本創建了一個衆所周知的全局符號(如是jQuery的情況)。

相關問題