Newsgroup: it.comp.lang.javascript
Titolo: FireFox e onload di Image

Secondo la mia ultima esperienza Firefox non si comporta bene con onload di 
oggetti immagine.
Cioe' :
var im = new Image();
im.onload = function() {
   alert("richiamata");
}
im.src=url;
onload non viene eseguito sempre...e' possibile?
Nel mio "test" si tratta di fare il preloading di una 15 di immagini, e 
delle volte (sono molto di piu' le volte che va a buon fine..da qui anche la 
mia difficolta' a capire cosa non va) alcune non appaiono con quel metodo.
C'e' da dire che con IE6 funziona sempre correttamente invece.
E' una cosa risaputa, oppure sto sbroccando qualcosa?

 E' una cosa risaputa, oppure sto sbroccando qualcosa?
Che mi viene in mente al momento, l'unica cosa risaputa sul caricamento di
tante immagini contemporanee era su alcune versioni di IE, il quale non le
caricava tutte.
-- 
- Venimmo, vedemmo... e lo inculammo!


Comunque la soluzione l'avrei trovata: metto tutte le image in un array, e 
in onload setto a true un flag dell'immagine.
Poi in window.onload mi ripasso quelle che non hanno scatenato un evento 
onload...cosi' facendo ottengo quello che voglio, pero' mi sembra strano che 
debba ricorrere a questi trucchetti.
Comunque c'e' ora un altro problema: si vorrebbe mettere una gif animata che 
appare mentre l'immagine carica, cosi che non si vede l'icona di immagine 
non esistente durante il caricamento.
<img src="loading.gif" id="im1" />   <script>loadImage("im1", 
"/servlet/code=2324");</script>
Poi in loadImage faccio il solito.
Con IE6 succede che loading.gif viene "stretchata" alla dimensione 
dell'immaigine che verra' caricata!
E' una cosa senza senso visto che quando assegno il nuovo src (dentro 
onload) l'immagine dovrebbe essere gia' stata scaricata, invece sembra che 
si debba riscaricare una seconda volta, e nel frattempo loading.gif prende 
le dimensioni dell'immagine che verra'.

 dell'immaigine che verra' caricata!
Intendi 90x200 o le dimensioni reali?
Io cmq eviterei di porre tutti quei "loading.gif"; tempestare la pagina di
"cose in movimento" è tra le cose peggiori che si possano fare.
Opterei per un unica gif, eventualmente, di progressione su un layer che
indica quante immagini sta caricando e quante ne mancano al completamento
(come è stato detto in un altro thread su questo NG).


 tutto corretto (soprattutto se ci sono tutte le richieste delle immagini).
Ho scoperto che in effetti il problema sembra essere del browser che non 
invia la richiesta.
Ho loggato la servlet che scarica l'immagine e su 12 da visualizzare  e' 
capitato che 2 sole sono state loggate dalla servlet (ovvero la servlet e' 
stata invocata solo 2 volte), pero' una sola immagine e' stata visualizzata 
(strano questo, me ne aspettavo 2 basandomi sul log). La servlet non ha mai 
lanciato eccezioni quindi non e' li il problema.
Per ora usero' la "pezza" che ti avevo detto, ma certo che sto avendo una 
brutta esperienza con l'oggetto Image, tanto che in futuro mi sa che lo 
evitero'. 


Anzi mi viene il dubbio che la servlet risponda male e l'oggetto image 
dall'altra viene mandato in palla.
Probabilmente questo fatto rovina tutta la gestione di tali oggetti da parte 
del browser (per un po' di tempo, perche' rifacendolo con window.onload 
funziona) e non riesce piu' a inviare le richieste.
Se cosi' fosse pero' non capisco perche' usando <img src=".."> non mi ha mai 
dato problemi.

 brutta esperienza con l'oggetto Image, 
Perché non provi a fare un debug serio, in modo da isolare il problema.
Io personalmente non ho mai usato pesantemente l'oggetto Image, come ti ho
detto, ma l'ho usato. E non ho avuto brutte esperienze di alcun genere.
Quindi, probabilmente c'è qualcosa che non va nel tuo codice, nel tuo server o
nel tuo browser.
-- 
- Egon, questo mi ricorda quando tentasti di trapanarti il cranio.
- Mi saebbe riuscito se non mi avessi fermato.

 Firefox.
Allora...sono tornato alle immagini statiche anche nel sito non solo nel 
test, ma non cambia nulla.
Facendo sniffing ho trovato delle anomalie sul http: non sapevo che http 
prevedesse un campo exception, ma usando un programma ho riscontrato che 
quando si verificano dei problemi c'e' almeno un header che contiene 
un'exception che dice:
"Client closed connection before receiving entire response".
Quindi mi sembra di poter dire a questo punto che il problema sta solo nel 
client, ovvero in Firefox, e probabilmente nella gestione dell'oggetto 
Image.
Curioso anche il fatto che ripassando dentro window.onload le immagini che 
non sono state caricate, ottengo sempre un risultato corretto.
Purtroppo non sono riuscito a trovare niente su internet, sembra quasi che 
questo problema lo abbia avuto solo io. 

 questo problema lo abbia avuto solo io.
Per questo sono dubbioso.
-- 
- E.. lei è mestruata al momento?
- Ma scusi questo che c' entra??
- Si inchini alla scienza!

 che si possa replicare l'errore?
Posso mettere online il sito, ma una pagina singola statica e' inutile...se 
mi accanonisco contro una pagina sola non avviene mai il mancato 
caricamento. Piu' probabile quando salto da una all'altra.
Il sito al momento e' in 
http://84.222.79.124:8080/archery
Le immagini sono visibili quando selezioni il menu a sinistra, poi la 
sottovoce del menu.

 sottovoce del menu.
Allora... ho dato un'occhiata rapida.. IMVHO c'è troppo "spaghetti-code", e
questo decisamente non aiuta. Hai aperto/chiuso dopo ogni tag IMG un relativo
tag script per invocare il caricamento dell'immagine in questione.
La mia modesta opinione è la seguente:
a) E' *davvero* necessario tutto questo? Non ne vedo realmente il motivo, in
una struttura del genere, un approccio di questo tipo per la gestione delle
immagini.
b) Fai troppe richieste parallele. Secondo me Firefox si perde perché crei
troppi oggetti Image e fai troppe richieste contemporaneamente.
Se non hai trovato informazioni in merito, ed è plausibilissimo visto che è
difficile trovarsi in condizioni come queste, penso che sarebbe corretto
notificarlo a mozilla.
-- 
- Se tu un Dio?
- N...no.
- E allora MUORI!
- Ray, se qualcuno ti chiede se sei un Dio, tu devi rispondere di sì!

 troppi oggetti Image e fai troppe richieste contemporaneamente.
Hai ragione, forse quel codice e' effettivamente troppo pesante. Devo 
trovare soluzioni piu' furbe e leggere...

 Devo trovare soluzioni piu' furbe e leggere...
Lo temo anch'io.
-- 
- Penso che sia meglio dividerci
- Buona idea
- SII, così possiamo fare più danno!!