Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Динамическая загрузка js (https://javascript.ru/forum/misc/30589-dinamicheskaya-zagruzka-js.html)

imissyouso 09.08.2012 12:05

Динамическая загрузка js
 
Пытаюсь динамически подгрузить javascript:
$(document).ready( function(){
      ZSite.lib.dynamicLoadScript('test.js');  
      ZSite.lib.dynamicLoadCode('test.init();');  
}

ZSite.lib.dynamicLoadScript = function(url)
{
   var e = document.createElement("script");
   e.src = url;
   e.type="text/javascript";
   document.getElementsByTagName("head")[0].appendChild(e);   
}
ZSite.lib.dynamicLoadCode = function(code)
{
   var e = document.createElement("script");

   e.type="text/javascript";
   e.innerHTML=code;
   document.getElementsByTagName("head")[0].appendChild(e);   
}


код из test.js и test.init() выполняются, но при выполнении test.init() вываливается ошибка что мол объект test не найден. Как так?

содержимое test.js :
test = {
        init: function()
        {
          alert('works!');
            } 
    }

Как правильнее подгрузить динамически js и выполнить метод из него?

Deff 09.08.2012 12:10

<script type="text/javascript">

[JS]Link=[];
Link[0]='test1.js';
Link[1]='test2.js';
Link[2]='test3.js';

for(var i=0; i<Link.lehgth; i++) {
   var js = document.createElement('script');
   js.setAttribute('src',Link[i]);
   document.body.appendChild(js);
   test.init();
}

</script>

lord2kim 09.08.2012 12:13

imissyouso, после того как подгрузили .js вы можете напрямую выполнить данный код
$(document).ready( function(){
      ZSite.lib.dynamicLoadScript('test.js'); 
      test.init();
}

vadim5june 09.08.2012 12:17

Цитата:

Сообщение от imissyouso
но при выполнении test.init() вываливается ошибка что мол объект test не найден. Как так?

Вы наверно обращаетесь к методу объекта test до того как загрузился скрипт

Deff 09.08.2012 12:18

lord2kim,
Ну да - поправил - зачитал ток первую часть (про загрузку

imissyouso 09.08.2012 12:37

Код:

Вы наверно обращаетесь к методу объекта test до того как загрузился скрипт
а как навесить проверку на то что скрипт загрузился? и тлоько потом выйзвать его метод?

lord2kim 09.08.2012 12:40

imissyouso, как вариант
var js = document.createElement('script');
   js.setAttribute('src',Link[i]);
   js.setAttribute('onload', test.init());
   document.body.appendChild(js);

vadim5june 09.08.2012 12:53

Цитата:

Сообщение от imissyouso
а как навесить проверку на то что скрипт загрузился? и тлоько потом выйзвать его метод?

var js = document.createElement('script');
js.onload=function(e){alert('load'};
js.setAttribute('src',Link[i]);

imissyouso 09.08.2012 13:18

спасибо, решил делать через .ready jQuery.
Теперь вот такая беда: почему этот метод не работает в IE?
ZSite.lib.dynamicLoadScript = function(url)
{
   var e = document.createElement("script");
   e.src = url;
   e.type="text/javascript";
   document.getElementsByTagName("head")[0].appendChild(e);   
   return e;
}

подругружаемый скрипт не выполняется. В FF всё норм

Deff 09.08.2012 13:39

imissyouso,
Не засовывайте скрипт в head - нафег он там нужен после загрузки
Ставьте
document.body.appendChild(e);


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