Parto da questa auto citazione dall'ultimo mio intervento ( ma questo è un 3ad tutto marzulliano...a buon intenditore :rollo: ). In realtà inserendo il codice nella mia pagina web avevo trascurato il test sui vari browsers, limitandomi ad utilizzare il caro mozilla. Li, come da manuale, il metodo funzionava alla grande.setInterval(aggFoto,10000,'param1')
In realtà, già andando avanti mi ero reso conto che il valore della variabile "maddr" non era stabile. Ciò perche dalla funzione di partenza avevo tolto l'argomento maddr, passando, cosi solo l'argomento "wbc" ( id dell'immagine) dal quale avevo intenzione di ricavarmi l'src. Ma in questo caso, per evitare di richiamare l'immagine dalla cache, aggiungevo all'src di partenza un suffisso variabile legato alla data, per cui lo stesso src dell'immagine mutava e al successivo loop, richiamando l'src dell'elemento, avrei ottenuto un src già modificato al quale si aggiungeva un ulteriore pezzo di suffisso, con un processo reiterato che portava la stringa dell'src a crescere all'infinito.
avevo notato, senza rendermi conto specificamente del problema ( che poi dirò) che passare un solo argomento al metodo setInterval era meglio interpretato rispetto al caso del passaggio di piu argomenti. Poi, arresomi dinnanzi all'evidenza e per evitare di allungare il codice con regular expressions etc etc, ho deciso di trovare una soluzione passando direttamente io l'src ( quindi passando due argomenti).Funzione scritta originariamente
function aggFoto(maddr, wbc) {
t = new Date();
document.getElementById(wbc).src="'"+maddr+"'" +t.getTime();
}
Funzione modificata
function aggFoto(wbc) {
maddr = document.getElementById(wbc).src;
t = new Date();
mtxt = maddr + "?t=" + t.getTime();
document.getElementById(wbc).src = mtxt;
}
Cosi ero arrivato alla soluzione del mio intervento precedente ( alla prima riga di quest'ultimo mio intervento) con l'accortezza di inserire a partire dal terzo posto la lista degli argomenti. Infatti era questa la definizione stessa del metodo ( o meglio una delle due prevalenti):
setInterval(functionReference:Function, interval, [param1:Object, param2, ..., paramN])
Cosi arriviamo al cuore di questo mio ultimo intervento.
Ebbene, con grandissima mia sorpresa, quando già consideravo vinte battaglia e guerra, mi sono accorto che il test era OK sul mozilla, ma non sull'InternetExplorer.VVoVe:
Disperazione!!!
Avevo controllata e corretta, ricontrollata e ricorretta la sintassi. Andava bene. Cosa fare? Cosa non andava?
Avevo cercato ovunque. Anche qui su HTML.it avevo trovato un tentativo parziale di risolvere tale problema
Soluzione di Xinod e fcaldera
ma la soluzione si limitava all'utilizzo di setInterval con una funzione ad un solo argomento.
Insomma dopo un po di ulteriori ricerche ecco l'illuminazione:
SEMPLICEMENTE i metodi setInterval e setTimeout non funzionano allo stesso modo per l'IE. La definizione è diversa. Infatti quando lavoriamo con L'IE il terzo parametro del metodo non è l'elenco opzionale degli argomenti della funzione da cadenzare ma l'indicazione (opzionale) del tipo di linguaggio di script ( JS o VB ).
Allora, scoperto l'inghippo, come fare per aggirarlo?
Ho pensato a due soluzioni:
Soluzione 1: passo un solo argomento che è la combinazione dei due separati da un carattere particolare e poi splitto all'interno della funzione ricavandomi gli argomenti di partenza
Soluzione 2 ( secondo me più pulita): utilizzo una funzione anonima function() che assegno alla (proprietà) funzione aggFoto con i diversi argomenti che voglio trasferire.
Un po come quando si lavora con l'assegnazione degli "event handlers"
Ecco, dunque la soluzione:
function (){aggFoto (maddr, wbc); }
per cui, con riferimento ai metodi setInterval e settimer:
Element.onevent ="setInterval( function() { aggFoto('id','src'); }, cadenza)"
Con questo stratagemma anche il browser dello zio Bill risponderà bene.
Un'ultima puntualizzazione.
Anche se lo stratagemme funziona bene anche con mozilla, è bene differenziare le funzioni per i diversi tipi di browsers.
Saluti
![]()

VVoVe:
Saluti
Rispondi quotando