Newsgroup: it.comp.lang.javascript
Titolo: Problema sull'evento unload della finestra

Ciao a tutti,
ho un problemone che mi perseguita ormai da settimane....
Ho una pagina principale scambi..htm che richiama una funzione js
(finestra_scambio() nel file ifm.js) ogni volta che si seleziona o
deseleziona una delle varie checkbox. La funzione apre una nuova finestra se
questa non è già stata aperta, altrimenti "fa qualcosa" che per questo
problema non è importante:)
Questo è la parte di codice interessata:
- FILE scambi.htm
<form name="frmB<%=CountGiocB%>"><td><input type = 'checkbox' name =
'chkB<%=CountGiocB%>' value="<%=rsCalciatori("Nome_Giocatore")%>"
onClick='javascript:finestra_scambio("<%=squadraA%>","<%=squadraB%>")'
align="left"></td></form>
-------------------------------
- FILE ifm.js
function finestra_scambio(sqdA,sqdB)
{
   //alert(winOpen); //dovrebbe restituire falso se la finestra è chiusa e
vero se la finestra è aperta....
   if (winOpen == false) {
     alert('Finestra chiusa, ora la apro '+winOpen);
  winOpen = true;
  fsc =
window.open("about:blank","fsc","width=400,height=1000,toolbar=no,dependent=
yes");
     fsc.document.write('<HTML>');
     fsc.document.write('<HEAD>');
     fsc.document.write('<TITLE>Riassunto Scambio</TITLE>');
     fsc.document.write('<SCR'+'IPT SRC="ifm.js"></SCR'+'IPT>');
     fsc.document.write('</HEAD>');
     fsc.document.write('<BODY onUnload ="opener.winOpen=false;">');
     fsc.document.write('<TABLE BORDER=1 id = "scambio">');
     fsc.document.write('<TR>');
     fsc.document.write('<TD>Giocatori '+sqdA+'</TD>');
     fsc.document.write('<TD>Giocatori '+sqdB+'</TD></TR>');
     //alert(document.frmA18.chkA18.checked+'
'+document.frmA18.chkA18.value);
     //alert(document.frmA30);
     fsc.document.write('</TABLE>');
     fsc.document.write('</BODY></HTML>');
   }
   else
     alert('Finestra aperta, non posso aprirla, la devo ricaricare!!!!
'+winOpen);
}
-------------------------
Per vedere se la finestra è ancora aperta o no uso una variaibile winOpen
settata true all'apertura della finestra e che dovrebbe essere settata a
False nel metodo onUnload della finestra.
Se clicco la prima volta su un checkbox la finestra viene aperta
correttamente (e la variabile è settata a true). A questo punto, se lascio
la finestra aperta e clicco su una checkbox la finestra è riconosciuta
giustamente aperta, ma se chiudo la finestra e seleziono una checkbox non mi
riapre più la finestra perchè il valore di winOpen è false.
Il problema dovrebbe essere in questa riga:
  fsc.document.write('<BODY onUnload ="opener.winOpen=false;">');
Non so perchè non è eseguita l'istruzione nel metodo unload....
Se provo a fargli eseguire un'altra istruzione associata all'evento unload
(ad esempio un'alert) questa viene eseguita.....
Se provo a fargli eseguire l'istruzione fuori dall'unload l'assegnazione è
eseguita in maniera corretta. Le due cose combinate però non funzionano....
Ho anche provato a mettere l'istruzione onUnload ="opener.winOpen=false;">
all'interno dei tag script
[fsc.document.write('<SCR'+'IPT>window.onUnLoad=window.opener.winOpen=false;
</SCR'+'IPT>');] ma nulla....
Ormai siete la mia ultima speranza:) Dimenticavo.... Ho provato il tutto
solo con IE5 e IE5.5.
HEEEEEEEELPPPPPPPPP!!!!!!!!!!:)
Grazie anticipato alle capocce del newsgroup...
A presto
Gian

Il fatto che IE non funzioni perfettamente utilizzando opener è risaputo, è
probabile che questa sia una delle possibili combinazioni che tramite opener
non passi il valore della variabile......
--
andreotta fabiano
WebMªster ATI POWER s.n.c.
andr...@atipower.it
http://www.aticommerce.com
  (new)
http://www.atipower.it
http://www.jsdir.com
http://www.dxml.it
  (u.c.)

 Il fatto che IE non funzioni perfettamente utilizzando opener č risaputo,
č


 Ho anche provato a mettere l'istruzione onUnload ="opener.winOpen=false;">
Mi ero sbagliato, non eseguiva proprio l'evento. Non so il perchè, ma questi
sono misteri informatici, se apro la finestra, gliela faccio ricaricare con
il metodo location.reload() e poi la chiudo l'istruzione associata l'evento
viene eseguito (quindi funziona tutto) (l'ho scoperto per caso) ma se non
ricarico la finestra l'evento viene ignorato...
A questo punto penso che sia un bug (forse solo di IE).... In pratica
quando si associano eventi alle finestre aperte con il metodo winopen questi
non vengono "intercettati". Sapete niente a riguardo??? Mi era già successa
una cosa simile in un'altra occasione....
A presto
Gian

prova ad inserire il controllo:
if (top.fin1 && !top.fin1.closed )
(pensavo di aver gią spedito questa risposta?)
vlad

scusami, ho fatto un copy&paste...
prima di riaprire la stessa finestra controlla se la finestra è già aperta
if (nomeFinestra && !nomeFinestra.closed)
se è così fai che ricaricarla, se no, aprila.
spero che una risposta così banale possa esserti d'aiuto...
vlad