Wenn Sie diesen Beitrag im Jahr 2020 lesen, sind Sie wahrscheinlich eher an Versprechen gewöhnt. Ein moderner Ansatz ist vorzuziehen, wenn entweder alle Ihre Zielbrowser ES6 unterstützen oder Sie eine Polyfüllung verwenden.
Diese Lösung funktioniert wie die Antwort von @JaykeshPatel , basiert jedoch auf 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');
});
Sie können einige Kontextvariablen in Argumenten des resRückrufs übergeben, oder wenn Ihre Bibliothek ein globales Symbol importiert hat, können Sie dort darauf verweisen.
Da jQuery beispielsweise das $globale Symbol einführt , können Sie res($)einen lokalen Bereich dafür aufrufen und erstellen (ideal, wenn Sie TypeScript verwenden und nicht in jeder Datei eine Modulvariable deklarieren möchten, sondern auf diese Weise schreiben können const $ = await loadScript(..)).
Wenn Sie kein Argument übergeben möchten, können Sie Ihren Code einfach wie folgt kürzen:
script.onload = res;
script.onerror = rej;
onloadonload