Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.08.2010, 21:47
Новичок на форуме
Отправить личное сообщение для 67bytes Посмотреть профиль Найти все сообщения от 67bytes
 
Регистрация: 09.08.2010
Сообщений: 2

Динамически загружаемая 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 или нет.
Ответить с цитированием
  #2 (permalink)  
Старый 10.08.2010, 21:54
Новичок на форуме
Отправить личное сообщение для 67bytes Посмотреть профиль Найти все сообщения от 67bytes
 
Регистрация: 09.08.2010
Сообщений: 2

вот вообщем-то решение, если интересно: http://wonko.com/post/painless_javas..._with_lazyload. Вставить к себе в код этот плагин и спокойно загружать все что нужно динамически и исполнять callback-функции, если нужно
Ответить с цитированием
  #3 (permalink)  
Старый 06.03.2013, 08:06
Интересующийся
Отправить личное сообщение для imsha Посмотреть профиль Найти все сообщения от imsha
 
Регистрация: 19.11.2008
Сообщений: 28

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

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

Последний раз редактировалось imsha, 06.03.2013 в 08:12.
Ответить с цитированием
  #4 (permalink)  
Старый 06.03.2013, 08:35
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

document.write же не останавливает выполнение текущего скрипта.
Ответить с цитированием
  #5 (permalink)  
Старый 06.03.2013, 08:38
Интересующийся
Отправить личное сообщение для imsha Посмотреть профиль Найти все сообщения от imsha
 
Регистрация: 19.11.2008
Сообщений: 28

особо не вникал, но html5boilerplate.com использует в своем шаблоне именно подобную версию.
Ответить с цитированием
  #6 (permalink)  
Старый 06.03.2013, 08:44
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Там код, использующий jQuery идет ниже, в других тегах <script>. А для решения проблемы автора топика это ничего не даст.
Ответить с цитированием
  #7 (permalink)  
Старый 06.03.2013, 09:01
Интересующийся
Отправить личное сообщение для imsha Посмотреть профиль Найти все сообщения от imsha
 
Регистрация: 19.11.2008
Сообщений: 28

Ну тогда подойдет 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

Последний раз редактировалось imsha, 06.03.2013 в 09:04.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работает ли jquery с html сформированным динамически? warobushek Общие вопросы Javascript 5 13.06.2010 08:26