2009-10-28 62 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来检测它加载的,你能不能包括你自己