Newsgroup: it.comp.lang.javascript
Titolo: Ogni tanto anche firefox sbaglia

Non so più cosa fare.
Il problema l'ho avuto in uno script più complesso, ma sono riuscito
ad isolarlo ad una pagina con qualche semplice riga di js.
Si tratta del preload di un immagine.
Volutamente l'immagine è sia sulla pagina con il tag img che inserita
in un fasullo oggetto Image per gestirne il caricamento.
Il fatto è che con Internte Exploder funziona bene, e con firefox a
volte si a volte no. (la maggior parte delle volte va, ma basta provare
un 7/8 volte il refresh per accorgersi che ogni tanto sgarra)...
Trovate l'esempio che mostra un alert al caricamento in cache
dell'immagine (son poche righe di js):
http://host.epper.org/tmp/prova.htm
Grazie a chiunque possa darmi una mano ;)

 
http://host.epper.org/tmp/prova.htm
Non capisco perché metti la funzione per il preload *dopo* il tag img...
cioè, fai il preload *dopo* che l'immagine è stata già caricata... insomma,
è una cosa che non serve proprio a niente, credo...
Ad ogni modo, spiegheresti meglio qual è il tuo problema?
-- 
Nando [?]
Ex-Apostolo della Ex-Prova

 Grazie a chiunque possa darmi una mano ;)
Il secondo errore che hai fatto, è quello di aver assegnato l'event-handler
DOPO aver richiesto l'immagine. Impostare la proprietà src invoca direttamente
la richiesta HTTP della risorsa in questione.
Devi quindi prima impostare tutti gli event-handler necessari, e solo dopo
fare la richiesta. Se ne è sempre parlato in questo NG, relativamente al
caricamento di un immagine da script.
Immagino che il tuo "sgarra" volesse dire questo. Che non veniva richiamato
l'alert.
Metti l'istruzioni nel giusto ordine, in questo modo dovrebbe andare.
Facci sapere se ci fossero ancora problemi.
-- 
~ Se il destino è contro di noi, peggio per lui!

Scusate, ho fatto più errori qui che nella pagina :D
Cmq, Exploder lo scrivo senza rendermene conto ormai... E' per ripicca
contro chi l'ha sviluppato ;)
Vedrò di non commettere nuovamente questi errori.
Passiamo al problema:
Si, il fatto è che a volte il popup non appare.
Avevo scritto che lo script di caricamento era dopo il tag img. Questo
è dovuto al fatto che il codice che mi serve è più ampio e lo uso su
una pagina che contiene le immagini come html formattate normalmente.
Poi da JS (non al load, ma subito dopo che il parser ha passato i vari
img) mi prendo i vari url delle immagini con l'innerHTML e un po' di
regex e mi metto tutto come voglio io in modo più bellino.
Questo mi permette di avere una visualizzazione funzionale, anche se
scarna, anche per chi non ha Javascript abilitato.
Il caricamento mi serve perchè ci sono, in realtà, + immagini da
caricare e richiamando lo script durante il caricamento in mezzo alla
pagina le immagini non sono ancora in cache quindi è necessario
controllare quando lo sono.
Se volete vedere un attimo il codice più completo che fa quello che
dovrebbe (a parte il problema saltuario di firefox che qui sitamo
esaminando) potete andare qui:
http://work.epper.org/portfolio/cic
scusate ancora, e grazie dei consigli

 controllare quando lo sono.
Per quale motivo? Se tanto fai tutto tramite innerHTML, regexp e url delle
immagini, queste informazioni sono già presenti a prescindere dal caricamento
avvenuto o meno.
Volendo, inoltre, puoi evitare di creare "doppioni" delle immagini, e
impostare direttamente l'event-handler onload sul tag IMG.
In ogni caso, ti ricordo che se decidi di utilizzare la tecnica del preload,
di impostare gli event-handler prima di impostare l'attributo src; e di
mettere tale codice prima che il parser incontri i tag IMG "doppioni".
-- 
~ Se i miei cattivi pensieri non fossero caricati a salve,
ogni giorno sarebbe una strage.

io ho
<div id="gallery">
<h3>titolo1</h3>
<img src="img1.png">
<p>Descrizione1</p>
<h3>titolo2</h3>
<img src="img2.png">
<p>Descrizione2</p>
</div>
e avanti così. Le url delle immagini di cui mi serve il preload le
prendo direttamente dai vari attributi src di ogni tag img. Quindi devo
per forza chiamare il JS dopo l'id gallery altrimenti da dove prendo le
url?
Cmq grazie , sembra funzionare meglio.

 url?
O le duplichi nel codice javascript (tanto facendo la cosa in PHP ti č del
tutto trasparente); oppure come ti ho detto, imposti l'onload direttamente sui
tag:
<div id="gallery">
	<h3>titolo1</h3>
	<img src="img1.png" onload="immagineCaricata(this)" />
	<p>Descrizione1</p>
	<h3>titolo2</h3>
	<img src="img2.png" onload="immagineCaricata(this)" />
	<p>Descrizione2</p>
</div>
-- 
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)