我想从我的javscript include中获取jquery库。
这是否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");
});
})();
如果您想要YUI3,请将node.src
和$.noConflict
更改为YUI
;如果您是YUI2,则将YAHOO
更改为
答案 0 :(得分:4)
我只能用这种方法考虑一个问题(在上个月的问题上已经出现了两次)。
问题是1.3.2中的jQuery无法检测文档是否已加载(如果文档加载后它本身也包含在内)(即正在进行动态<script>
包含,bookmarklet等) em>非 -IE浏览器。在这种情况下,传递给.ready()
的函数将永远不会被调用。
以下是此问题的错误报告:http://dev.jquery.com/ticket/4196过去8个月内没有发生任何事情。
现在,我设计loadJquery
的方式应该有效地取代$(document).ready()
,因此您可能不必担心。但是以$(document).ready()
函数传递样式编写的任何代码都不会执行。
答案 1 :(得分: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);
}
})();
答案 2 :(得分:0)
如果您正在寻找标准方式,而不是想出自己的实现,您可能会考虑:
答案 3 :(得分:0)
请参阅我的答案,获取可靠的异步require()函数:How do I include a JavaScript file in another JavaScript file?