Я пытаюсь лениво (динамически) загружать файлы javascript на свою веб-страницу.Ошибка загрузки файлов javascript динамически
я использовал это:
http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml
function loadjscssfile(filename, filetype){
if (filetype=="js"){ //if filename is a external JavaScript file
var fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript")
fileref.setAttribute("src", filename)
}
else if (filetype=="css"){ //if filename is an external CSS file
var fileref=document.createElement("link")
fileref.setAttribute("rel", "stylesheet")
fileref.setAttribute("type", "text/css")
fileref.setAttribute("href", filename)
}
if (typeof fileref!="undefined")
document.getElementsByTagName("head")[0].appendChild(fileref)
}
loadjscssfile("myscript1.js", "js") //dynamically load and add this .js file
loadjscssfile("myscript2.js", "js") //dynamically load and add this .js file
loadjscssfile("myscript3.js", "js") //dynamically load and add this .js file
эти 3 сценария должны быть загружены в последовательности.
myscript3 зависит от myscript2
и myscript2 зависит от myscript1.
пытается загрузить его таким образом ведет себя странно.
Похоже, эти не загружаются в последовательности предназначены и, следовательно, неопределенные ошибки выбрасываются иногда и временами ошибки не выбрасываются.
Я делаю что-то неправильно.
Обновлено:
Я использую этот код для загрузки файлов в правильной последовательности
function loadjscssfile(filename, filetype) {
if (filetype == "js") { //if filename is a external JavaScript file
var fileref = document.createElement('script')
fileref.setAttribute("type", "text/javascript")
fileref.setAttribute("src", filename)
}
else if (filetype == "css") { //if filename is an external CSS file
var fileref = document.createElement("link")
fileref.setAttribute("rel", "stylesheet")
fileref.setAttribute("type", "text/css")
fileref.setAttribute("href", filename)
}
return fileref;
}
function loadSync(files, types) {
if (typeof (files[0]) === 'undefined') return false;
var script = loadjscssfile(files[0], types[0]);
script.onload = function() {
files.shift();
types.shift();
loadSync(files, types);
}
if (typeof script != "undefined")
document.getElementsByTagName("head")[0].appendChild(script)
}
loadSync(['scripts/module3.base.js', 'scripts/module3.core.js', 'scripts/module3.init.js'], ['js', 'js', 'js']);
console.log('this should get printed when all the three files are loaded');
Но выход консольного:
this should get printed when all the three files are loaded
scripts/module3.base.js:9 base is initialised
scripts/module3.core.js:6 core is initialised
scripts/module3.init.js:3 app is initialsed
Похоже, первый вызов loadSync сам по себе является асинхронным вызовом
Я могу загрузить файлы, подобные этому, в правильной последовательности. Но теперь я не вижу их в разделе «Источники» инструментов для разработчиков Chrome (естественно, теперь мы добавляем разметку) – ankur
, потому что теперь вы добавляете источник файла в встроенный тег скрипта, поэтому сценарий не является внешним, поскольку он имеет не 'src'. –
Я не хочу этого. Я все еще хочу видеть их в разделе ресурсов. так что они остаются в отдельных файлах (как и должно быть) – ankur