динамическая загрузка скриптов
Для подгрузки скриптов использую код:
var s=document.createElement('script'); s.type='text/javascript'; s.src=[I]<имя файла скрипта .js>[/I]; var s0=document.getElementsByTagName('script')[0]; s0.parentNode.insertBefore(s,s0); Как определить успешно ли подгружен файл (например - что будет если такого файла нет)? Пробовал смотреть .text, привязывать события onload,onerror к скрипту - бестолку. |
s.onload = function...Не работает разве? |
попробовал так:
s.onload=function (){alert('loaded');}; не работает когда есть файл и когда его нет |
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); } |
Спасибо. Похоже, вопрос снят.
|
Я к примеру использую RequireJS.
|
RequireJS херня по-моему. Попробуйте во время выполнения кода динамически сформировать путь к скрипту и затем подгрузить его с помощью RequireJS - выдаст ошибку! Копание в его внутренностях показал, что перед загрузкой скрипта он ищет его имя в неком своем списке, который формируется при инициализации. Т.е. ему заранее необходимо знать пути ко всем скриптам, которые буду использоваться. Соотвественно, если попросить его загрузить скрипт, путь к которому формируется динамически в процессе работы (например: '/js/admin/cms/controllers/' + controllerName + '/index.js'). Он скажет извините не могу найти такой у себя в списке - гуляйте.
|
Часовой пояс GMT +3, время: 01:22. |