Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Динамически загружаемая jQuery и jQuery-функции в одном файле (https://javascript.ru/forum/misc/11143-dinamicheski-zagruzhaemaya-jquery-i-jquery-funkcii-v-odnom-fajjle.html)

67bytes 09.08.2010 21:47

Динамически загружаемая 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 или нет.

67bytes 10.08.2010 21:54

вот вообщем-то решение, если интересно: http://wonko.com/post/painless_javas..._with_lazyload. Вставить к себе в код этот плагин и спокойно загружать все что нужно динамически и исполнять callback-функции, если нужно

imsha 06.03.2013 07:06

А если вот так:
window.jQuery || document.write('<script src="js/vendor/jquery-1.9.1.min.js"><\/script>');

if (window.jQuery){
    console.log('загружена');
} else {
    console.log('не загружена');
};

danik.js 06.03.2013 07:35

document.write же не останавливает выполнение текущего скрипта.

imsha 06.03.2013 07:38

особо не вникал, но html5boilerplate.com использует в своем шаблоне именно подобную версию.

danik.js 06.03.2013 07:44

Там код, использующий jQuery идет ниже, в других тегах <script>. А для решения проблемы автора топика это ничего не даст.

imsha 06.03.2013 08:01

Ну тогда подойдет 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, время: 20:05.