Newsgroup: it.comp.lang.javascript
Titolo: Dimensioni automatiche immagini: problema con Firefox

Il problema e' il seguente: ho modificato una routine javascript in modo da
aprire una finestra contenente un'immagine le cui dimensioni sono rilevate
automaticamente.
Con Explorer tutto funziona. Con Firefox il primo click sulla miniatura apre
la finestra a tutta pagina e solo se la finestra viene chiusa e riaperta si
apre alle dimensioni opportune.
Immagino che forse cio' derivi dal fatto che il browser non faccia in tempo
a caricare l'immagine prima che javascript determini le dimensioni
dell'immagine e che al secondo click l'immagine sia gia' nella cache.
Non so pero' come risolvere il problema e non ho trovato nulla in rete.
Qualcuno ha idea di come venirne a capo?
Grazie in anticipo.
Romeo
La pagina di prova si trova a:
http://www.brianzapopolare.it/prove/20040906_prova_transferview.htm
La routine javascript si trova a:
http://www.brianzapopolare.it/styles/transfer_view_new.js
--
http://www.brianzapopolare.it/
http://digilander.libero.it/PRCseregno
---------------

 apre alle dimensioni opportune.
IE6sp1: stesso "problema" che indichi. Non è vero che lo fa solo firefox, è
lo script che è errato.
Se ne è parlato pochi giorni fa: devi usare l'evento onload del tag img per
determinare width e height, mentre nel tuo script assegni l'src all'oggetto
Image e subito dopo leggi le dimensioni.
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.


Grazie del suggerimento, il post precedente mi era sfuggito.
Ho assegnato all'evento onload una funzione anonima contenente il resto
della routine e pare che funzioni.
Va bene cosi' o c'e' di meglio?
Romeo
function transferview(image_source)
{
 var width,height;
 var cond1,cond2,scroll;
 var img=new Image();
 img.src=image_source;
 img.onload=function()
 {
  width=img.width;
  height=img.height;
  if (width==0)
   cond1=" "
  else cond1="width="+(width+20)+"";
  if (height==0)
  {
   cond2=" ";
   scroll="yes"
  }
  else
   {
   cond2="height="+(height+70)+"";
      scroll="no"
  };
  var s1 ="<title>Immagine ingrandita</title>"
  var s2="<body>"
  var s3 ="<div style='text-align:center'><img src='"+img.src+"'
style='border-width:0px' />"
  var s4 ="<form><input type='button' value='Chiudi'"+
                " onClick='self.close()'>"
  var s5 ="</form></div></body>"
  ImageWindow=window.open("", "newwin"+width,
    "toolbar=no,scrollbars="+scroll+",menubar=no,"+cond1+","+cond2);
  ImageWindow.document.write(s1+s2+s3+s4+s5)
  ImageWindow.document.close()


   var s1 ="<title>Immagine ingrandita</title>"
Unica nota: conviene creare codice html-standard...mancano quindi i tag
html iniziale e finale e la sezione head non è specificata.
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.

  var cond1,cond2,scroll;
Ti conviene dichiararle direttamente dentro la funzione anonima.
Altrimenti,temo, rischi di creare delle variabili globali.
-- 
ZER0://coder.gfxer.web-designer/
~ Tutti quelli che credono nella psicocinesi, per favore alzino la mia
mano.


Vero, si tratta tuttavia solo di una prova da completare.
Grazie.
Romeo


 >Ti conviene dichiararle direttamente dentro la funzione anonima.
Per le variabili il suggerimento e' ragionevole.
Per l'attributo "src" non sono convinto di aver capito il suggerimento.
Intendi una cosa del genere?
function transferview(image_source)
{
 var img=new Image();
 img.onload=function()
 {
     (...)
 }
 img.src=image_source;
}
Romeo


 }
Esattamente.
Considera che quando imposti l'attributo src stai dicendo al browser di
scaricare quell'immagine. E' bene quindi impostare l'event-handler relativo
al caricamento avvenuto, *prima* dare l'ok al browser di scaricarla.
Spero di essere stato piu' chiaro, adesso.
-- 
ZER0://coder.gfxer.web-designer/
~ "Nei film americani, qualsiasi problema che venga considerato
sufficientemente catastrofico, puo' essere risolto facendo esplodere uno
o piu' ordigni nucleari" (ZER0 & Cosimo)