Я создал виджет JavaScript, который необходимо встраивать на любой сторонний сайт в любой среде. Виджет основан на jQuery и jQuery UI. Я выполнил шаги из Как встраивать виджет Javascript, который зависит от jQuery, в неизвестную среду , чтобы добавить jQuery ответственным образом - отлично работает для встраивания jQuery. Но когда я пытаюсь добавить jQuery UI, ничего не получается. Вот код:
(function(window, document, version, callback) {
var j, d;
var loaded = false;
if (!(j = window.jQuery) || version > j.fn.jquery || callback(j, loaded)) {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js";
script.onload = script.onreadystatechange = function() {
if (!loaded && (!(d = this.readyState) || d == "loaded" || d == "complete")) {
callback((j = window.jQuery).noConflict(1), loaded = true);
j(script).remove();
}
};
document.documentElement.childNodes[0].appendChild(script)
}
})(window, document, "1.3.2", function($, jquery_loaded) {
$.getScript('http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.js', function(){
console.log('loaded');
});
});
Когда я запускаю это, я получаю сообщение «загружено», за которым следует сообщение об ошибке «$ is undefined» в строке 15 jquery-ui.js. Но как может $ быть неопределенным, если я использую $ .getScript () для загрузки пользовательского интерфейса jQuery? И почему я вижу сообщение «загружено» до того, как получаю сообщение об ошибке? Согласно документации jQuery, getScript не должен выполнять обратный вызов до тех пор, пока сценарий не будет загружен и выполнен.
Могу ли я каким-либо образом использовать эту структуру для включения jQuery UI, или мне нужно использовать загрузчик сценариев, например RequireJS чтобы загрузить все, принудительно установить зависимости и т. д. ?