Мой код работает корректно. (
alert("test");
срабатывает)
Но в терминале говорит о ошибке
//создаём регистр в который будем заносить все скрипты которые импортировали
var registrImport = {};
//пишем текущий скрипт в регистр
registrImportUpdate("/js/kernel/importer/importer.js");
//в этом блоке будем грузить все системные пакеты. НА данный момент только package
registrImportUpdate("/js/kernel/package/package.js");
var s = loadJs("/js/kernel/package/package.js");
s.onerror = function() {
alert("Ошибка при загрузке системного пакета package.js");
};
//функция для запуска скриптов и отработки кода.
//пример использования
/*
imports([
"/js/src/supports/supports_html5.js",
"/js/src/lib/jquery.js"
],
function (){
alert('test');
},
function (err){
alert(err);
});
где
[
"/js/src/supports/supports_html5.js",
"/js/src/lib/jquery.js"
]
скрипты которые необходимо загрузить.
function (){
alert('test');
}
функция которая будет выполнена если всё загрузим
function (err){
alert(err);
}
функция которая будет вызвана в случае ошибки
*/
function imports(arr, onSuccess, onError){
//количество скриптов для загрузки
var count = arrCount(arr);
//сколько скриптов передано на загрузку
var coutLoad = 0;
//скрипты перебираем в цикле
arr.forEach(function(item) {
//добавляем 1 загрузку в щётчик
coutLoad++;
//если пакет до этого не импортирован то вернёт undefined
if (registrImport[item] == undefined){
//пакета в регистре ещё нет. Добавим его туда
registrImportUpdate(item);
//загрузим скрипт
var script = loadJs(item);
//выполним одну из функций
// onError если ошибка
// onSuccess если загружено
loadFunc(script,item, onError, onSuccess, count, coutLoad);
} else {
console.info(item + " загружен ранее.");
}
});
}
//считаем количество скриптов в масиве
function arrCount(arr){
var count = 0;
arr.forEach(function(){
count++;
});
return count;
}
//грузит скрипт по url
function loadJs(url){
var script = document.createElement('script');
script.src = url;
script.async = false;
script.defer = true;
document.head.appendChild(script);
return script;
}
function loadFunc(script,url, onError, onSuccess, count, coutLoad){
//если ошибка
script.onerror = function() {
onError(url);
};
//если всё
script.onload = function() {
//Что бы срабатывало только когда загружен последний елемент масива
if(count == coutLoad){
onSuccess();
}
};
}
//добавляет запись в регистр
function registrImportUpdate(url){
registrImport[url] = 0;
}
Вызываю так
imports([
"/js/src/supports/supports_html5.js"
],
function (){
alert('test');
},
function (err){
alert(err);
});