Si vous lisez ce billet en 2021, vous êtes probablement plus habitué aux promesses. Une approche plus moderne est préférable si tous vos navigateurs cibles supportent ES6 ou si vous utilisez un polyfill.
Cette solution fonctionne comme suit @JaykeshPatel réponse, mais c'est basé sur Promise
s :
// definition
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();
}
});
}
// use
loadScript('http://your-cdn/jquery.js')
.then(() => {
console.log('Script loaded!');
})
.catch(() => {
console.error('Script loading failed! Handle this error');
});
Vous pouvez passer certaines variables contextuelles dans les arguments de la fonction res
ou si votre bibliothèque a importé un symbole global, vous pouvez l'y référencer.
Par exemple, depuis que jQuery introduit l'option $
le symbole global, vous pouvez appeler res($)
et créer une portée locale pour celle-ci (parfait si vous utilisez TypeScript et que vous ne voulez pas déclarer une variable de module dans chaque fichier, de cette façon vous pouvez écrire const $ = await loadScript(..)
).
Si vous n'avez pas l'intention de passer un argument, vous pouvez simplement raccourcir votre code comme ceci :
script.onload = res;
script.onerror = rej;