Newsgroup: it.comp.lang.javascript
Titolo: aggiungere dinamicamente codice js

Ciao,
per problemi di kb ho suddiviso i dati necessari per un'applicazione,
disposti in array su file .js separati che vorrei caricare solo
all'occorrenza.
L'applicazione chiede, per esempio, di indicare la regione italiana di
interesse. Dopodiche' carica l'array delle province di quella regione,
memorizzate nel file regionexyz.js che sara' del tipo;
province = new Array();
province[0]="   ";
.....
il caricamento dell'array avviene cosi':
-----------funzione start
function showpro(reg){ //reg=id della regione
  nomefile="js/province/"+reg+".js"; //individua il file js
			corrispondente alla regione scelta
  nuovoscript=document.createElement("script"); /crea un nodo script
  nuovoscript.setAttribute("src",nomefile);//attribuisce la sorgente
  document.getElementsByTagName("head")[0]).appendChild(nuovoscript);
        //inserisce il nuovo script nell'head
//a questo punto l'array province e' disponibile e posso popolare una
select;
province.sort();
while (lista.length=0){ //lista e' una select...
  lista.remove(lista.length);   //prima la svuoto perche' potrebbe
                                avere le province di un'altra regione
}
for (i=0;i<province.length;i++){
        if (brow){    //brow=1 se Netscape
                lista.add(new Option(provice[i],"",0,0),null);
        }
        else
                lista.add(new Option(comuni[i],"",0,0));
        }
}
------------funzione end
Problema: IE funziona, ovvero carica il js e lo interpreta. Netscape e
FF no. Non danno errore ma l'array province e' sconosciuto. [not
defined]. O meglio non lo interpretano subito ma dopo. Mi spiego
meglio:
1) scelgo una regione
2) IE: funziona e mi fa vedere nella select le province di quella
regione.
   FF: provice in not defined
3) scelgo un'altra regione
4) IE: svuota la select e la riempie con le nuove province
   FF: questa volta non da errore ma riempie la select con le province
della prima regione. 
5) proseguendo... FF e' "in ritardo" di una regione.
Quindi anche FF "ha digerito" il js ma quando lo interpreta?
Ho provato a "fregare" FF chidendogli la regione due volte a fila
(chiamando showpro(prov) due volte) ma per ora con scarsi risultati.
Suggerimenti?
saluti,
mg

aggiunta:
messo tutto sul server vero, il problema c'e' anche con IE (ma non
sempre...)
E' un problema di refresh, di timeout, di che?
grazie a voi in anticipo
mg

 E' un problema di refresh, di timeout, di che?
Stai cercando di eseguire una funzione da un file js che ancora non è stato
caricato.
Eventuali soluzioni: invoca la funzione direttamente nel file JS che vai a
caricare. Così sei sicuro che verrà eseguita quando il file è stato
realmente caricato.
Esisterebbe anche l'event-handler onload sul tag "script", ma non mi pare
che sia esattamente standard e supportato da tutti i browser.
Oppure puoi impostare empiricamente un timeout in modo che la funzione
venga chiamata dopo un "tot" di millisecondi, ma solitamente questi sono
obrobri empirici (per l'appunto) che sconsiglio.
Altrimenti, puoi sempre utilizzare XmlHttpRequest, laddove supportato.
-- 
.ZER0//sign
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)
on air ~ "Bishonen - Grottango - Sangue e Acciaio"


Fatto cosi' e funziona. Cioe' in calce alla definizione dell'array nel
file js chiamo una funzione riempiselect() che sta nel file html.
Provato con IE 6, FF 1.5 e NS 7.
Vi metto il link alla pagina provvisoria (mancano immagini, stili
ecc..) per chi e' interessato (lo devo ancora testare con connessione
telefonica "lenta"). L'applicazione e' implemantata su
province/comuni/localita' della regione toscana.
http://www.rete.toscana.it/sett/territorio/carto/foto/prova/foto/start.htm
Grazie e saluti.
mg