Newsgroup: it.comp.lang.javascript
Titolo: Per Roberto: aiutami per fovore

piu in generale per quanti mi possono aiutare. Trscrivo qui il codice html
con lo script semplificato che mi dà problemi con IE 4
<html>
<head>
</head>
<body>
<script language="JavaScript"><!--
var Messaggi  = new Array(2);
var i = 2;
var x = -1;
function ScriviMessaggio(Mess1,Mess2,Mess3)
{
    Messaggi[0] = Mess1;
    Messaggi[1] = Mess2;
    Messaggi[2] = Mess3;
    document.write("<div id='messaggio' align='center' style='filter:
blendtran (duration=3); font-family: Comic Sans MS; height: 30px; width:
100%'>");
    StampaMessaggio();
    document.write("</div>");
    document.close();
}
function StampaMessaggio()
{
    if (x == i)
    {
        x = 0;
    }
    else
    {
        x++;
    }
    messaggio.filters[0].apply();
    messaggio.style.display = "";
    messaggio.style.visibility = "";
    messaggio.innerText = Messaggi[x];
    messaggio.filters[0].play();
    mytimeout = setTimeout("StampaMessaggio()",6000);
}
ScriviMessaggio("ciao","da","me");
--></script>
</body>
</html>
Due osservazioni sullo script
La funzione ScriviMessaggio (qui apparentemente inutile), sullo script
originale assegnava i valori dinamicamente all'array a seconda dei dati in
ingresso, e di conseguenza calcolava anche i, che in questo esempio è
fissato a 2. Ho voluto riportare lo script il più possibile uguale
all'originale. Sullo script originale, poi, la funzione StampaMessaggio è la
seguente
function StampaMessaggio()
{
    if ((Messaggi[x] == "") || (x == 2))
    {
        x = 0;
    }
    else
    {
        x++;
    }
    messaggio.filters[0].apply();
    messaggio.style.display = "";
    messaggio.style.visibility = "";
    messaggio.innerText = Messaggi[x];
    messaggio.filters[0].play();
    mytimeout = setTimeout("StampaMessaggio()",6000);
}
in quanto, per qualche motivo che ancora non riesco a comprendere, alla
chiamata della stessa funzione con il setTimeout, il valore di i (sebbene
non viene cambiato in nessun modo all'interno della funzione) cambia da 2 e
diventa prima 1, poi 3,5, e poi ricomincia da capo....... Comunque
supponiamo che lo la funzione sopra riportata (quella con if (i ==x)),
funzioni ( e la cosa succede, se la pagina non contiene altro codice html
oltre quello risportato (?!?!?!))
Adesso, se io eseguo lo script con IE5, tutto funziona come dovrebbe, se
invece uso IE4 (sia il 4 che il 4.01 SP1) compare il messaggio di errore
"message.filters.0 non è un oggetto valido" (o "non è definito", ora non
ricordo con esattezza), come se l'istruzione <div id='message ecc.ecc
all'interno del document.write venisse "scordato" da IE4. Infatti, se metto
lo stesso codice in HTML (senza il document.write), tutto funziona
perfettamente. Solo che io ho bisogno di introdurre questo codice in modo
dinamico!!!!!!!
Vi prego, che qualcuno mi riponda, mi dia qualche consiglio, che ormai non
so più cosa fare..........Se sono stato poco chiaro, ditemelo, che cercherò
di esporre meglio il problema, o di postare lo script
originale.................
Momentaneamente, finchè non riesco a risolvere questo problema (riguardo al
quale spero qualcuno di voi sappia consigliarmi), qualcuno mi potrebbe dire
come fare ad estrapolare la versione del browser (nagigator.appVersion), in
modo tale che lo script possa essere eseguito da coloro che possiedono IE 5
(che con questo browser funziona che è una meraviglia)?!?!?!
Grazie a tutti (e scusate se vi sto assillando, ultimamente)
--
bye by Neo
webmaster de "la homepage di Neo"
http://web.tiscalinet.it/neowebpage

Prova queste modifiche:
<html>
<head>
</head>
<body>
<script language="JavaScript"><!--
var Messaggi  = new Array(2);
var i = 2;
var x = -1;
function ScriviMessaggio(Mess1,Mess2,Mess3)
{
    Messaggi[0] = Mess1;
    Messaggi[1] = Mess2;
    Messaggi[2] = Mess3;
    document.open()
    document.write("<div id='messaggio' align='center' style='filter:
blendtran (duration=3); font-family: Comic Sans MS; height: 30px; width:
100%'></div>");
    document.close();
    StampaMessaggio();
}
function StampaMessaggio()
{
    if (x == i)
    {
        x = -1;
    }
    else
    {
        x++;
    }
    messaggio.filters[0].apply();
    messaggio.style.display = "";
    messaggio.style.visibility = "";
    messaggio.innerText = Messaggi[x];
    messaggio.filters[0].play();
    mytimeout = setTimeout("StampaMessaggio()",6000);
}
ScriviMessaggio("ciao","da","me");
//--></script>
</body>
</html>
Spero di aver capito quello che vuoi fare... un'altra cosa... di solito
davanti a messaggio ci và document no? (document.messaggio.style...) Non ti
dà errore?
---
the fly on the net
webmaster di "the devil inside"
http://members.tripod.com/netfly
e-mail:
net...@netbusiness.it

 file://--></script>


Perche' qualcuno non fa una
pagina con le domande e le risposte
che si fanno quando si inzia JS,
in modo che si possa indirizzare nel caso
a quella pagina per apprendere i rudimenti....
[(se ricordo bene Klaus ha una cosa del genere!)
in 
www.probo.it/javascript
 cercare nel sito
klaus e poi linkare sulla sua pagina..]
Il volontario sarebbe meglio fosse uno all'inizio..!
dopo sarebbe più facile fare script che funzionano.
--
Bye
Ro<*¿*>berto

Scusa Neo..
è che prendere uno script lungo
e cambiarlo in toto ci vuole tempo,
se fosse per una domanda al volo
avresti ragione.. è che non riesco
a trovare un errore da dirti al volo!
Scusa :(


 wrote in message
news:7q33ta$jjv$1...@diesel.cu.mi.it...


tutto a posto.........
e' proprio per quello che ho messo document.close() dopo il write, prima
delle chiamate ai filtri. Penso allora che IE non faccia in tempo a creare
l'oggetto prima delle chiamate alle funzioni dei filtri. Prova ad usare un
timeout, in attesa che venga creato. Un alert(document.messaggio) dovrebbe
dirti se esiste o meno, per il debug.
Prova magari anche document.all["messaggio"]. ecc. ecc.
