Caricare un file JavaScript o CSS in modo asincrono

ATTENZIONE! Il post ha più di 2 anni e le informazioni contenute potrebbero essere obsolete (ad esempio a causa di un aggiornamento di versione rispetto agli elementi descritti o links modificati da siti esterni).

Una piccola funzione utile per caricare un file JS o CSS in modo asincrono, utilizzando JavaScript puro senza nessuna libreria.

La funzione permette di caricare un file ed eseguire una funzione di callback al completamento:

/**
 * Carica un file js o css in modo asincrono all'interno dell'header
 * 
 * @param {String} url Url della risorsa
 * @param {String} type Tipo di risorsa: js o css
 * @param {Function} callback Funzione di callback
 * @returns {undefined}
 */
function loadAsync(url, type, callback) {
 var s;
 var r = false;
 switch (type) {
  case 'css':
   s = document.createElement('link');
   s.rel = 'stylesheet';
   s.type = 'text/css';
   s.href = url;
   break;
  case 'js':
   s = document.createElement('script');
   s.type = 'text/javascript';
   s.src = url;
   break;
 }
 s.async = true;
 if (callback && typeof callback === "function") {
  s.onload = s.onreadystatechange = function () {
   if (!r && (!this.readyState || this.readyState == 'complete')){
    r = true;
    callback();
   }
  };
 }
 document.getElementsByTagName('head')[0].appendChild(s);
}

Ed ecco un esempio per utilizzare la funzione:

//css
loadAsync('http://www.miosito.com/test.css', 'css', function(){
 alert('Script CSS caricato!');
});

//js
loadAsync('http://www.miosito.com/test.js', 'js', function(){
 alert('Script JS caricato!');
});

 

Per caricare più files e impostare una funzione di callback alla fine del caricamento è possibile utilizzare una versione avanzata dello script, disponibile a questo indirizzo: Caricare più files javascript o css in modo asincrono

 


Commenti