Я хотел бы вытянуть в библиотеке jQuery из моего 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
и $.noConflict
кому: YUI
если Вы хотите YUI3, или YAHOO
если Вы - YUI2 и т.д.
Из сообщений в наших внутренних списках рассылки на работе я заметил следующее:
Существует множество пограничных кроссбраузерных случаев, в которых задействовано динамически инъекционные скрипты. Если вставка исходного файла YUI 3 в ваш скрипт не вариант, и если вы не можете полагаться на свойство уже иметь YUI 3 seed загружен, я бы рекомендовал использовать 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);
}
})();
Есть только одна проблема, о которой я могу думать с этим подходом (и это дважды поднималось в вопросах по SO за последний месяц).
Проблема в том, что jQuery как 1.3.2 не может определить, загружен ли документ, если он сам включен после загрузки документа (например, динамическое