Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Загрузка по требованию. Как реализовать? (https://javascript.ru/forum/jquery/5443-zagruzka-po-trebovaniyu-kak-realizovat.html)

Viper 15.10.2009 16:19

Загрузка по требованию. Как реализовать?
 
Собственно есть такая задача. Нужно проверить подключеня ли библиотека Jquery и если нет, то подключить.

Пытаюсь проверить таким образом

if (typeof jQuery === "undefined") {
	var s = document.createElement("script");
	s.src = "'.$mosConfig_live_site.'/components/com_с/ajax/jquery.latest.min.js";
	document.getElementsByTagName("head")[0].appendChild(s);
	//doc.body.appendChild(s);
}

jQuery(function($) {
	alert("Testing");
});


т.е. проверка срабатывает, но вот никак не хочет создавать script и подключать его в head.

В чем проблема и где грабли?!

Octane 15.10.2009 16:30

Если jQuery не подключен, то typeof jQuery вызовет ошибку, так как переменная не определена. Проверяйте window.jQuery. И подключаемый скрипт начнет загружаться асинхронно, поэтому нельзя сразуже в коде использовать jQuery, нужно дождаться загрузки скрипта.

e1f 15.10.2009 16:32

Цитата:

Сообщение от Octane (Сообщение 32470)
Если jQuery не подключен, то typeof jQuery вызовет ошибку, так как переменная не определена.

Да ну? ;)

UPD
Viper, посмотрите, как реализовано выполнение скриптов в самом jQuery, и сделайте так же.

Viper 15.10.2009 16:57

Цитата:

Сообщение от Octane (Сообщение 32470)
Если jQuery не подключен, то typeof jQuery вызовет ошибку, так как переменная не определена. Проверяйте window.jQuery. И подключаемый скрипт начнет загружаться асинхронно, поэтому нельзя сразуже в коде использовать jQuery, нужно дождаться загрузки скрипта.

отнюдь. как раз таки проверка и работает. но вот сама загрузка нет.

Цитата:

Сообщение от e1f (Сообщение 32471)
Да ну? ;)

UPD
Viper, посмотрите, как реализовано выполнение скриптов в самом jQuery, и сделайте так же.

собственно взято из JQ

var head = document.getElementsByTagName("head")[0] || document.documentElement,
	script = document.createElement("script");

script.type = "text/javascript";
script.src = "'.$mosConfig_live_site.'/components/com_c/ajax/jquery.latest.min.js";
head.insertBefore( script, head.firstChild );


результата 0.

Kolyaj 15.10.2009 17:00

Viper,
вы пропустили главную реплику
Цитата:

Сообщение от Octane
И подключаемый скрипт начнет загружаться асинхронно, поэтому нельзя сразуже в коде использовать jQuery, нужно дождаться загрузки скрипта.


Viper 15.10.2009 17:23

такс... ну совсем темный лес...

Kolyaj уже наступил на граблю...

_http://remysharp.com/2007/11/14/on-demand-script-loading/
нашел вроде бы то что нужно, но опять же не пашет... :-E

Может кто-нить толково разъяснить на пальцах. Ну или код чтоли привести если несложно :help:

ЗЫ! В js новичек.

Kolyaj 15.10.2009 17:32

http://jsx.ru/Texts/ModulesInJS/index.html

Octane 15.10.2009 18:04

Цитата:

Сообщение от e1f
Цитата:

Сообщение от Octane (Сообщение 32470)
Если jQuery не подключен, то typeof jQuery вызовет ошибку, так как переменная не определена.

Да ну? ;)

fail… был уверен, что так :) вроде в стандарте про это ничего не сказано.

Viper 16.10.2009 13:41

Цитата:

Сообщение от Kolyaj (Сообщение 32477)

оно конечно хорошо. но загружать ещё 80кб кода слишком уж накладно. к тому же 90% того функционала мне не нужно. и уж простите через жопу загружать плагины для JQ(пусть и валидно)...
к тому же попробовал подключить библиотеку из стороннего места, понял что нужно ещё больше кода переписывать.

ЗЫ! Решение в поиске. Простое!

Kolyaj 16.10.2009 13:50

Я вам не предлагаю брать именно это решение. Это пример реализации, и того, что в динамической подгрузке все не так просто. События загрузки скрипта нет, поэтому или вы добавляете в подгружаемые файлы служебный код, или по таймауту проверяете появление каких-либо объектов. Оба варианта плохие.

Цитата:

Сообщение от Viper
Решение в поиске.

Там все решения есть, только им пользоваться никто не хочет/не умеет.


Часовой пояс GMT +3, время: 01:59.