Newsgroup: it.comp.lang.javascript
Titolo: [SOLUZIONE]Caricamento pagina e chiusura finestra.

Ciao a tutti,
Sono cosi' soddisfatto di questa soluzione che mi e' venuto in mente di 
pubblicarla.
Sto sviluppando una web application, che spessisimo invia dati ad un 
server che impiega anche vari secondi per elaborare query o comunque dei 
dati.
Ecco la soluzione che ho adottato:
Nel onbeforeunload delle pagine ho scritto:
   ...
   <body onbeforeunload="loading()" >
     qualche contenuto..
   </body>
   ...
la function loading imposta la variabile globale finestraAperta a true:
var finestraAperta = false;
function loading(){
   // Apro una finestra con l'immagine del caricamento.
   try{
     finestraAperta = true;
     var w = 200;
     var h = 200;
     var t = Math.floor((screen.height-h)/2);
     var l = Math.floor((screen.width-w)/2);
     var paramsFields;
     var windowStr = new Array();
 
windowStr.push("../pages/templates/loading.jsp?oldUrl="+window.location.href.split("?")[0]);
     windowStr.push("");
     windowStr.push("top="+t+", left="+l+", width="+w+", height="+h+", 
menubar=no, toolbar=no");
     window.open(windowStr[0],windowStr[1],windowStr[2]);
   } catch(e) {
   }
}
Dopodiche' nella jsp aperta non c'e' altro che un'immagine di sfondo che 
da un idea di movimento.
Nell'evento onload del body, richiamo la function checkLoad();
<html>
   <head>
     <script type="text/javascript" src="../scripts/valid.js"></script>
   </head>
   <body onload="checkLoad();">
     <style>
       body{
         background : #fff url(../images/loading.gif) no-repeat top left;
       }
     </style>
   </body>
</html>
La function checkLoad controlla che la finestra madre abbia la variabile 
finestraAperta a false (impostato nel caricamento della pagina).
Altrimenti imposta un timer e richiama se stessa dopo un attesa.
function checkLoad(){
   if (!window.opener.finestraAperta)
     window.close();
   else
     timer=setTimeout("checkLoad()",200);
}
Che ne dite? Come vi sembra?
Sembra funzionare abbastanza bene!
-- 
            Davide Gurgone
      web: 
http://www.gurgone.it/
mail: davidechiocciolinagurgonepuntoit

 Ecco la soluzione che ho adottato:
[...]
Un consiglio.
Visto che stai sviluppando una web application ti trovi in un ambiente 
controllato; ovvero decidi, sai, puoi prevedere quali browser utilizzano 
i visitatori.
Su explorer e i browser basati su gecko (mozilla, firefox e compagnia 
bella) abbiamo a disposizione le richieste xmlhttp che ti permettono con 
poco codice di avere un "look & feel" molto piu' adeguato e applicazioni 
piu' efficaci e facili da gestire.
Prova a fare due ricerche anche in questo gruppo: ne abbiamo parlato spesso.
Altrimenti due ottimi punti di partenza:
http://www.mozilla.org/xmlextras/
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/xmobjxmlhttprequest.asp

 


 ora, non vorrei ci volesse troppo tempo...
No, non intendevo questo.
Rifacciamoci al tuo caso:
 > Sto sviluppando una web application, che spessisimo invia dati ad un
 > server che impiega anche vari secondi per elaborare query o comunque
 > dei dati
Dopodiche' presenti una soluzione per una schermata di attesa mentre le 
elaborazioni sul server vengono eseguite.
Con xmlhttp potresti non effettuare alcun cambio pagina (quindi puoi 
potare via molto del codice che ne gestisce lo stato), fare svolgere le 
operazioni al server in maniera asincrona (mentre il server lavora, la 
tua interfaccia sul client puo' continuare ad operare), eccetera eccetera.
Quando il server ha completato l'elaborazione, manda una risposta al 
client e viene scatenato un evento.
Ho reso l'idea?

 Ho reso l'idea?
Mi stai prendendo in giro? Esiste davvero questa roba?
Ma e' fantastico! vado a farmi un giro su quei siti, piu' tardi! Grazie..


 Mi stai prendendo in giro? Esiste davvero questa roba?
:-)
Per ambienti intranet (win32/IE) esiste da sempre; prima si usava Remote
Scripting, poi è "saltato fuori" xmlhttp...se non lo conosci ti cambierà
tutto nella programmazione intranet. Per Internet Opera non lo supporta
(purtroppo).
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

 
Ho letto da qualche parte che l'ultima versione di Opera supporta 
XmlHttpRequest.
Ciao.
	-Ema-

XmlHttpRequest.
Attenzione che alcune versioni di Opera, secondo
http://jibbering.com/2002/4/httprequest.html
 hanno dei problemi.
'bye

Ma e' fantastico! vado a farmi un giro su quei siti, piu' tardi! Grazie..
Aggiungi:
http://kb.mozillazine.org/Dev_:_Extensions_:_Example_Code_:_Using_XMLHttpRequest
http://jibbering.com/2002/4/httprequest.html
http://www.xulplanet.com/references/objref/XMLHttpRequest.html
http://www.phppatterns.com/index.php/article/articleview/82/1/2/
'bye