Динамически загружаемая jQuery и jQuery-функции в одном файле
Здравствуйте! Помогите советом, пожалуйста.
Мне необходимо подключить к странице один внешний js-файл, который будет: - проверять наличие jQuery на странице и если jQuery нет, то динамически подгружать либу - пока jQuery не загрузится, не исполнять никакой код из этого файла - после потверждения загрузки jQuery, исполнить нужные jQuery-функции. Вот что у меня вышло: load = function() { //добавляем в хэд массив ссылок на внешние скрипты load.getScript(); //исполняем нужный код после загрузки jQuery load.tryReady(0); } load.getScript = function() { var filename = ["jquery.min.js", "jquery-ui.min.js"] for (i=0;i<filename.length;i++) { var fileref = document.createElement('script') fileref.setAttribute("type","text/javascript") fileref.setAttribute("src", filename[i]) if (typeof fileref !="undefined") {document.getElementsByTagName("head")[0].appendChild(fileref)} } } load.tryReady = function(time_elapsed) { //проверяем загрузку библиотеки if (typeof $ == "undefined") { if (time_elapsed <= 5000) { setTimeout("load.tryReady(" + (time_elapsed + 200) + ")", 200); } else { alert("jQuery незагружена") } } else //библиотека уже загружена { // тут наши функции на jQuery } } load(); Функция рабочая, но из-за setTimeout() могут возникать проблемы, особенно когда вставляешь в эту функцию код нескольких плагинов. То работает, то не работает. Кто-нибудь можеть подсказать, как можно обойтись без setTimeout() для проверки, загрузилась ли jQuery или нет. |
вот вообщем-то решение, если интересно: http://wonko.com/post/painless_javas..._with_lazyload. Вставить к себе в код этот плагин и спокойно загружать все что нужно динамически и исполнять callback-функции, если нужно
|
А если вот так:
window.jQuery || document.write('<script src="js/vendor/jquery-1.9.1.min.js"><\/script>'); if (window.jQuery){ console.log('загружена'); } else { console.log('не загружена'); }; |
document.write же не останавливает выполнение текущего скрипта.
|
особо не вникал, но html5boilerplate.com использует в своем шаблоне именно подобную версию.
|
Там код, использующий jQuery идет ниже, в других тегах <script>. А для решения проблемы автора топика это ничего не даст.
|
Ну тогда подойдет http://requirejs.org
Это на страницу <script data-main="scripts/main" src="scripts/require-jquery.js"></script> Это в main.js require(["jquery"], function($) { $(function() { alert('Загружено') }); }); Документация тут: http://requirejs.org/docs/jquery.html |
Часовой пояс GMT +3, время: 12:43. |