2014-09-06 2 views
1

У меня есть следующие функции:Как добавить функцию обратного вызова после динамической загрузки файла JavaScript

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

, который позволяет динамически загружать JavaScript во время выполнения, и мне нужно, чтобы добавить функцию обратного вызова после загрузки некоторых новых файлов

Например, когда я

require('className.js'); 

и только после этого вызова

var a = new window[className]; 

файл еще не загружен, поэтому он генерирует ошибку.

+2

требуют (URL, вызов) {... e.onload = callback} – eosterberg

ответ

4

Вы можете добавить onLoad в элемент сценария, но остерегайтесь, что на некоторой старой версии IE немного глючит.

Принимая код в качестве ссылки:

function require(url, callback) 
{ 
    var e = document.createElement("script"); 
    e.src = url; 
    e.type="text/javascript"; 
    e.addEventListener('load', callback); 
    document.getElementsByTagName("head")[0].appendChild(e); 
} 

require("some.js", function() { 
    // Do this and that 
}); 
+0

Вы почти правы ... , но e.addEventListener ('load', callback); ) –

+0

Отредактировано с помощью addEventListener –

0

В дополнение к ответу Simone Джанни «s, в случае, если вы хотите загрузить набор JS-файлов, а также запустить функцию обратного вызова в конце, где вы хотите убедитесь, что все файлы загружены, вы можете сделать это рекурсивно следующим образом:

function loadList(list, i, callback) 
     { 
      require(list[i], function() 
      { 
       if(i < list.length-1) 
       { 
        loadList(list, i+1, callback); 
       } 
       else 
       { 
        callback(); 
       } 
      }); 
     } 

вызовов с:

loadList(jsList, 0, function() 
    { 
     // code that applies after all URLs in jsList have loaded 
    }); 
Смежные вопросы