Newsgroup: it.comp.lang.javascript
Titolo: Caricare immagine in una nuova finestra autoridimensionante

Ciao a tutti,
sto cercando di scrivere del codice js che mi permetta di fare quanto segue:
cliccando su un hyperlink di un'immagine, si deve aprire una nuova finestra 
le cui dimensioni sono le stesse (più alcuni pixel di margine) del file 
immagine.
L'hyperlink  è  il seguente:
<a href="javascript:popup('image.gif',20,20);">
All'interno della pagina contenente l'hyperlink, la funzione popup è così 
definita:
function popup(nomefile,x,y)
{
var objimage=new Image();
objimage.onload=leggidim;
function leggidim(); {
lar=objimage.width+40;
lun=objimage.height+40; }
objimage.src=nomefile;
win_popup=window.open(nomefile,"popup","scrollbars=yes,width="+lar+",height="+lun);
win_popup.moveTo(x,y);
}
Tutto ciò funziona male la prima volta (viene letto il valore 0 come 
lunghezza e larghezza delle immagini), e dalla seconda in poi
va perfettamente. Non riesco a capire dov'è il problema. Mi potete aiutare ?

 win_popup=window.open(nomefile,"popup","scrollbars=yes,width="+lar+",height="+lun);
Qua stai aprendo la popup, ma *PRIMA* che la leggidim() venga eseguita...
Sposta il window.open (e subito dopo il moveTo()) all'interno della
leggidim.
-- 
"e mai che mi sia venuto in mente
 di essere piů ubriaco di voi
 di essere molto piů ubriaco di voi"
									  F.D.A.

 leggidim.
Ho seguito il tuo suggerimento, ma non cambia nulla. Tra l'altro non sto 
riuscendo a capire.
Hai detto che con objimage.onload=leggidim; assegno la funzione leggidim 
all'evento di caricamento dell'immagine.
L'evento di caricamento dell'immagine hai detto avviene con 
objimage.src=nomefile;
Con 
win_popup=window.open(nomefile,"popup","scrollbars=yes,width="+lar+",height="+lun); 
apriamo la popup,
ma perchè dici che questo avviene *PRIMA* che la leggidim venga eseguita? La 
leggidim dovrebbe essere stata
GIA' eseguita, nella riga precedente, con l'assegnazione 
dell'objimage.src...

 dell'objimage.src...
No
Con objimage.onload=leggidim gli stai dicendo "quando hai caricato
l'immagine esegui questa function che calcola altezza e larghezza della
window da aprire". Ma devi ricordare che non è multithreading.
Ossia: *PRIMA* finisce la function che sta eseguendo, *POI* esegue
eventuali altri metodi.
Quindi è vero che hai assegnato la function all'evento prima, ma viene
comunque scatenata al termine della function che stai eseguendo. Ergo
quando esegui window.open la lar e lun non sono ancora state assegnate.
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

 immagine.
dai un'occhiata a questo link, forse ti può aiutare
http://www.codelifter.com/main/javascript/autosizeimagepopup.html

 
http://www.codelifter.com/main/javascript/autosizeimagepopup.html
Grazie per la segnalazione, ma quello script ha il problema che all'inizio 
la finestra č di dimensioni piccole,
e poi viene fatto il resize. E' un effetto un po brutto a vedere. Io invece 
voglio aprire direttamente una finestra
con le dimensioni giuste.

 ha scritto nel messaggio 
news:byz7b1r8...@ID-147253.user.individual.net...

Scusa dovevo aver sbagliato qualcosa, ora il codice funziona bene. Però 
continua a non essermi chiara una cosa.
Ok sul discorso che non è multithread, ma la funzione leggidim non dovrebbe 
essere eseguita dopo il caricamento dell'immagine ?
Il caricamento dell'immagine avviene tramite image.src, non tramite la 
popup, giusto ?
Quindi l'esecuzione dovrebbe essere questa:
image.onload=leggidim; --> assegna all'evento di caricamento dell'immagine 
la funzione leggidim
image.src=nomefile; --> esegue la funzione leggidim
window.open(bla bla) --> l'esecuzione di leggidim è terminata, apre una 
nuova finestra.
Cos'è che mi sta sfuggendo?
Secondo quesito. Il codice che usavo prima, funzionava male la prima volta e 
bene dalla seconda in poi.
Mi è sembrato di capire che è dovuto al fatto che i dati vengono messi nella 
cache. Ma esattamente dove
sono collocati i file di cache? Se io volessi ripristinare il comportamento 
del codice alla prima volta (per debug)
come dovrei fare per tornare indietro?

 window.open(bla bla) --> l'esecuzione di leggidim è terminata, apre una 
Non è multithreading...se sta eseguendo una function la deve terminare, e
se il tuo window.open si trova nella stessa function che ha assegnato
l'onload la prima volta non avrà le var valorizzate, dalla seconda invece
le avrà.
