Si está leyendo esta publicación en 2020, probablemente esté más acostumbrado a las promesas. Es preferible un enfoque más moderno si todos sus navegadores de destino son compatibles con ES6 o si está utilizando un polyfill.
Esta solución funciona como la respuesta de @JaykeshPatel , pero se basa en 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');
});
Puede pasar algunas variables contextuales en los argumentos de la resdevolución de llamada, o si su biblioteca importó algún símbolo global, puede hacer referencia a él allí.
Por ejemplo, dado que jQuery introduce el $símbolo global, puede llamar res($)y crear un alcance local para él (perfecto si está usando TypeScript y no desea declarar una variable de módulo en cada archivo, de esta manera puede escribir const $ = await loadScript(..)).
Si no quiere pasar ningún argumento, puede acortar su código de esta manera:
script.onload = res;
script.onerror = rej;
onloadestá bien para las versiones de IE 9 y posteriores, por lo que la configuraciónonloadprobablemente sea correcta para la mayoría de las personas ahora