2009-10-28 60 views
5

JavaScript庫。標準辦法,包括我想在jQuery庫拉從我javscript包括從JavaScript

這是否工作100%的時間?有沒有更好的辦法?

(function() { 

var loadJquery = function (cb) { 
    var addLibs = function() { 
     if (typeof(document.body) == "undefined" || document.body === null) { 
      setTimeout(addLibs, 100); 
      return; 
     } 

     var node = document.createElement("script"); 
     node.src = "http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"; 
     document.body.appendChild(node); 
     checkLib(); 
    }; 

    var checkLib = function() { 
     if (typeof($) == "undefined" || $("*") === null) { 
      setTimeout(checkLib, 100); 
      return; 
     } 
     cb($.noConflict()); 
    } 
    addLibs(); 
} 

loadJquery(function($){ 
    // Do stuff with $ 
    $(document.body).css("background", "black"); 
}); 

})(); 

更改node.src$.noConflictYUI如果你想YUI3,或YAHOO如果你YUI2等

回答

2

從張貼在我們的工作的內部郵件列表,我指出這樣的:

有參與動態 注入腳本許多跨瀏覽器的邊緣情況。如果滾動YUI 3種子文件到您的腳本不是 一個選項,如果你不能依靠物業已經有 YUI 3號種子裝,我推薦使用LazyLoad(無恥插頭),以 引導你腳本:http://github.com/rgrove/lazyload/

您可以合併lazyload.js到腳本,然後使用這樣的 加載YUI 3號種子,如果它不是已經在頁面上:

(function() { 
    function init() { 
    YUI().use('node', function (Y) { 
     // ... do my stuff ... 
    }); 
    } 

    if (YUI) { 
    init(); 
    } else { 
    LazyLoad.js('http://yui.yahooapis.com/3.0.0/build/yui/yui-min.js', 
init); 
    } 
})(); 
4

這裏只有一個問題,我可以用這種方法認爲(這又拿出了在上個月的SO上有兩次提問)。

的問題是,作爲jQuery的1.3.2如果如果在文檔中加載(即動態<script>列爲你正在做的,書籤等)後,本身包含的文件被加載無法檢測 - IE瀏覽器。在這種情況下,傳遞給.ready()的函數將不會被調用。

下面是問題的錯誤報告:http://dev.jquery.com/ticket/4196什麼都沒有與它發生在過去的8個月。

現在,你設計loadJquery的方式,因爲我看到它應該有效地取代$(document).ready(),所以你可能不必擔心。但是,以$(document).ready()函數傳遞樣式編寫的任何代碼都不會執行。

+0

呵呵,這真的很好知道。我一會兒就有這個問題,不知道爲什麼會發生。 – 2009-10-28 23:57:10

+0

而不是依靠jQuery來檢測它加載的,你能不能包括你自己