Почему это достигает main(), а jQuery все еще не определен?

Я пытаюсь изменить различные загрузчики так, чтобы несколько скриптов могли быть обработаны до вызова основной функции. Это должно загрузить jQuery, затем jQueryUI и затем вызвать main(), чтобы фактически запустить скрипт пользователя. Тем не менее, он проходит через цикл, но когда он попадает в main(), я получаю консольную ошибку от Chrome о том, что jQuery не определен.

!function loader (i) {
        var requires = [ 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'
                       , 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js'
                       ];
        var loadScript = function (i) {
                    var script    = document.createElement('script');
                    script.type   = 'text/javascript';
                    script.src    = requires[i];
                    script.onload = (++i === requires.length) ? function () { loader(i); }
                                                              : function () { main(); }
                    document.head.appendChild(script);
            };

        loadScript(i || 0);
}();

function main () {
    console.log(jQuery.version);
    console.log(jQuery.ui.version);
}

2 ответа

Решение

Вот последний сценарий, который я придумал, если кто-то ищет такие вещи. http://userscripts.org/scripts/review/123588

Пилат поймал часть этого с троичным. У Нейта Б тоже была его часть: jQuery использовал jQuery.fn.jquery (но пользовательский интерфейс был непоследовательным и использовал jQuery.ui.version).

Было бы неплохо выяснить, как пропустить бит обертки посередине, для третьей стороны, но это работает.:)

Я не думаю jQuery.version является действительным свойством и возвращает undefined, Пытаться $.fn.jquery вместо этого и посмотрим, что произойдет.

Другие вопросы по тегам