Стандартный способ включать библиотеку JavaScript из JavaScript

Я хотел бы вытянуть в библиотеке 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 и т.д.

5
задан Mosè Raguzzini 19 November 2019 в 16:09
поделиться

3 ответа

Из сообщений в наших внутренних списках рассылки на работе я заметил следующее:

Существует множество пограничных кроссбраузерных случаев, в которых задействовано динамически инъекционные скрипты. Если вставка исходного файла 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);
   }
})();
2
ответ дан 14 December 2019 в 13:40
поделиться

Есть только одна проблема, о которой я могу думать с этим подходом (и это дважды поднималось в вопросах по SO за последний месяц).

Проблема в том, что jQuery как 1.3.2 не может определить, загружен ли документ, если он сам включен после загрузки документа (например, динамическое