Вход

Просмотр полной версии : динамическая загрузка скриптов


dolas
09.09.2011, 11:55
Для подгрузки скриптов использую код:

var s=document.createElement('script');
s.type='text/javascript';
s.src=<имя файла скрипта .js>;
var s0=document.getElementsByTagName('script')[0];
s0.parentNode.insertBefore(s,s0);

Как определить успешно ли подгружен файл (например - что будет если такого файла нет)?
Пробовал смотреть .text, привязывать события onload,onerror к скрипту - бестолку.

Sweet
09.09.2011, 12:02
s.onload = function...Не работает разве?

dolas
09.09.2011, 12:07
попробовал так:
s.onload=function (){alert('loaded');};

не работает когда есть файл и когда его нет

ваый
09.09.2011, 12:35
var script = document.createElement('script');
if (script.readyState && !script.onload) {
// IE, Opera
script.onreadystatechange = function() {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
alert('Loaded');
}
}
}
else {
// Rest
script.onload = function() {
alert('Loaded');
};
}
script.src = src;
document.getElementsByTagName('head')[0].appendChild(script);Можно оформить в функцию:
var loadScript = function(src, callback, appendTo) {
var script = document.createElement('script');

if (!appendTo) {
appendTo = document.getElementsByTagName('head')[0];
}

if (script.readyState && !script.onload) {
// IE, Opera
script.onreadystatechange = function() {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
}
}
else {
// Rest
script.onload = callback;
}

script.src = src;
appendTo.appendChild(script);
}

dolas
09.09.2011, 14:00
Спасибо. Похоже, вопрос снят.

unclechu
12.09.2011, 20:38
Я к примеру использую RequireJS.

aleksp
08.03.2013, 06:07
RequireJS херня по-моему. Попробуйте во время выполнения кода динамически сформировать путь к скрипту и затем подгрузить его с помощью RequireJS - выдаст ошибку! Копание в его внутренностях показал, что перед загрузкой скрипта он ищет его имя в неком своем списке, который формируется при инициализации. Т.е. ему заранее необходимо знать пути ко всем скриптам, которые буду использоваться. Соотвественно, если попросить его загрузить скрипт, путь к которому формируется динамически в процессе работы (например: '/js/admin/cms/controllers/' + controllerName + '/index.js'). Он скажет извините не могу найти такой у себя в списке - гуляйте.