Sto sviluppando un'applicazione web con molto, molto javascript.
Però vorrei evitare di far scaricare tutto il codice se non è strettamente necessario, allora ho pensato ad una sottospecie di sistema di plugins.
Se l'utente richiede una funzionalità non presente nel framework di base, viene caricato il relativo plugin.
Per farlo uso questa funzione:
codice:
function loadJS(scriptName) {
var isLoaded = false
var scr = document.getElementsByTagName('script');
for (var i=0;i<scr.length;i++) {
if (scr[i].getAttribute('src').indexOf(scriptName) != -1) {
isLoaded = true;
break;
}
}
scr = null;
if (!isLoaded) {
scr = document.createElement('script');
scr.setAttribute('src','./js/'+scriptName);
scr.setAttribute('language','javascript');
scr.setAttribute('type','text/javascript');
var head = document.getElementsByTagName('head')[0];
head.appendChild(scr);
head = null;
scr = null;
}
}
In pratica controllo prima che quello script non sia già caricato. Se non lo è, crea un tag script e lo accoda nella sezione "head" della pagina.
Ora per richiamare il tutto faccio:
codice:
function _loadGoogle() {
loadJS('google.js');
google_window(); // funzione presente nel file google.js
}
Il tag script lo carica (se mostro l'output della sezione head il tag viene aggiunto) ma una volta arrivato alla funzione google_window() mi dice che la funzione non è definita. Questo perchè, suppongo, la chiamata a tale funzione avviene prima che il "plugin" sia totalmente caricato (infatti se richiamo la funzione una seconda volta, la esegue correttamente).
C'è un modo per bloccare il flusso di istruzioni della funzione _loadGoogle() fino a quando il file google.js non sarà caricato completamente?