Прежде всего, вы декларируете callback
, но никогда не использовали нас. Я предполагаю, что вы имеете в виду что-то вроде этого script.onload = callback;
.
(function() {
var loadScript = function(data, callback) {
var script = document.createElement("script");
script.src = data.src;
script.onload = callback; // NEW LINE
if (data.opts) {
if (data.opts.async) script.async = data.opts.async;
}
document.body.appendChild(script);
};
var loadScriptRecursive = function(scripts, index) {
loadScript(scripts[index], function() {
if (++index < scripts.length) {
loadScriptRecursive(scripts, index);
}
});
};
var scripts = [
{ src: "script1.js" },
{ src: "script2.js", opts: { async: false } }
];
loadScriptRecursive(scripts, 0);
})();
Но этого недостаточно, чтобы решить эту проблему, из-за $(document).ready()
.
Давайте посмотрим, что говорят документы:
.ready Метод () предлагает способ запуска кода JavaScript, как только объектная модель документа (DOM) страницы станет безопасной для манипулирования. [jQuery]
Событие DOMContentLoaded возникает, когда исходный документ HTML был полностью загружен и проанализирован, не дожидаясь полной загрузки таблиц стилей, изображений и подкадров. [MDN]
В первом примере DOMContentLoaded
срабатывает после загрузки JS файлов:
![index.html perfomance results](https://i.stack.imgur.com/HTQHj.png)
Во втором примере DOMContentLoaded
сработал немедленно, без ожидания файлов JS:
![index2.html perfomance results](https://i.stack.imgur.com/wX860.png)
Именно поэтому вам нужно использовать $(window).on("load", function() {});
вместо $(document).ready(function() {});