Якщо ви читаєте цю публікацію в 2020 році, можливо, ви більше звикли до обіцянок. Більш сучасний підхід є кращим, якщо або всі цільові браузери підтримують ES6, або ви використовуєте поліфіл.
Це рішення працює як відповідь @JaykeshPatel , але воно базується на Promises:
function loadScript(scriptUrl) {
const script = document.createElement('script');
script.src = scriptUrl;
document.body.appendChild(script);
return new Promise((res, rej) => {
script.onload = function() {
res();
}
script.onerror = function () {
rej();
}
});
}
loadScript('http://your-cdn/jquery.js')
.then(() => {
console.log('Script loaded!');
})
.catch(() => {
console.error('Script loading failed! Handle this error');
});
Ви можете передавати деякі контекстуальні змінні в аргументи resзворотного виклику, або якщо ваша бібліотека імпортувала якийсь глобальний символ, ви можете посилатися на нього там.
Наприклад, оскільки jQuery вводить $глобальний символ, ви можете викликати res($)та створити для нього локальну область (ідеально, якщо ви використовуєте TypeScript і не хочете оголошувати змінну модуля у кожному файлі, таким чином ви можете писати const $ = await loadScript(..)).
Якщо ви не хочете передавати будь-який аргумент, ви можете просто скоротити свій код так:
script.onload = res;
script.onerror = rej;
onloadце нормально для IE версій 9 і пізніших версій - так що просто налаштуванняonload, мабуть, нормально для більшості людей