Si mi rendo conto che il problema non è facile da spiegare.
In pratica: usando codice ajax, all'interno di un <DIV id="pippo"> viene iniettato, tramite l'attributo innerHTML - recentemente inserito anche in Firefox, per la sua utilità immagino - dell'HTML.
L'operazione finale (che avviene DOPO il caricamento e con stato 4: tutto ok) consiste nel far "girare" una routine javascript - chiamiamola "giuseppe()" - la quale va ad operare proprio sull'HTML appena caricato.
Quel che avviene è che il javascript non VEDE l'html appena caricato: un getElementById() restituisce valore nullo, nonostante quell'id esista, e nonostante nelle specifiche venga scritto che, all'atto del caricamento in innerHTML, viene effettuato anche il parsing e la corretta costruzione del DOM relativo al nuovo html appena iniettato.
La cosa curiosa che ho notato - e che speravo interessasse - è che se tra caricamento e funzione javascript interpongo un alert("qualcosa"), tutto funziona.
Ciò mi ha fatto pensare al fatto che è necessario dare un po' di tempo a un qualche thread perchè completi il parsing prima di effettuare operazioni sull'HTML stesso.
A me non serve affatto il DEFER: mi serve qualcosa (un workaround forse) che non mi obblighi ad usare l'alert in questione. Un wait()? Come sai purtroppo in javascript non si può fare. Inoltre giuseppe() ha bisogno di un parametro, per cui non posso usare setTimeout().
Il discorso, curiosamente, è identico sia per FF che per IE. Solo che, sotto IE, se organizzo in modo leggermente diverso la chiamata di giuseppe() e ci metto DEFER, le cose vanno. Tutto qui. Non ho bisogno che tu mi ribadisca che IE è una schifezza: dopo 15 anni di programmazione HTML, javascript, php, css, XML, XSL, mi sono fatto un'idea
Ho letto in un altro forum che l'implementazione di innerHTML sotto FF è stata un po' frettolosa e incompleta. Segnalo solo che effettivamente mi sembra sia così. Puoi indicarmi un possibile workaround? Esiste una variabile di stato che mi segnali il completamento del PARSING e della costruzione del DOM? O c'è proprio un errore nell'implementazione di innerHTML?