Newsgroup: it.comp.lang.javascript
Titolo: Perche' la finestra figlia non sa se c'e' la madre ?

Ho aperto un finestra, che qui chiamo figlia,
con il metodo window.open(eccetera) da un una finestra
che qui chiamo madre
Se la madre e' stata chiusa posso saperlo dalla figlia ?
Per esempio se nella figlia metto:
<BODY onUnLoad="javascript: if (la madre e' aperta ?)
 window.opener.history.go(0);">
Non sono riuscito a trovare un sistema che mi faccia funzionare
il costrutto con if. Perche' se nella figlia tento di accedere a
qualsiasi oggetto,  variabile o proprieta' che esistevano quando
la madre era aperta ottengo giustamente sempre un errore.
Pensavo si potesse sapere se la proprieta' opener esiste con
qualcosa del tipo isDefined(openerl), Exists(opener) boh
Magari esistesse in javascript qualcosa come in
Visual Basic:  ONERROR per gestire gli errori.
Si' lo so, potrei definire nella figlia una variabile boolena
che la madre modifica quando si chiude. Sembrera' strano
ma questa soluzione non va bene per il lavoro che sto facendo.
E da due ore che mi scervello, quasi mi vergono
--
Quicker email: 
pad...@provincia.padova.it

>Se la madre e' stata chiusa posso saperlo dalla figlia ?
hai provato 
if(!opener.closed)
Saluti





Salve, mi sono scaricato da sito 
www.js.point
 lo script per trasferire valori di 
campi form da una pagina ad una latr contenuta nello stesso frame, pero' non 
funziona (ho provato lo script senza inserirlo nella pagina così come si trova e 
mi dava errore).Io ho diviso la mia pagina in due frames uno che si chiama barra 
e uno inserisci. Nel frame inserisci vi è un input text per mettere un indirizzo 
http, io vorrei cliccando in un pulsante di barra.htm che si aprisse la pagina 
html il cui indirizzo nel campo text di inserisci.htm. Aiutatemi sono disperato 
è due giorni che ci provo.Un ulteriore aiuto, se il frame di destra e collegato 
ipertestualmente con la pagina inserisci si può sempre usare il metodo visto 
sopra. Vi ringrazio anticipatamente



 if(!opener.closed)
Che pero' per qualche ragione su MSIE5.00 non va bene
Su NS non lo so.
Riporto la porzione di codice della finestra figlia
<SCRIPT language="javascript">
function verifica (){
 if(!window.opener.closed) window.opener.location.reload();
}
</SCRIPT>
</HEAD>
<BODY bgcolor="#FFFFFF" onUnLoad="verifica();">
Nel body della finestra madre c'e' l'evento
<BODY onUnload="chiudi_finestra_figlia();">
Quando chiudo la finestra figlia funziona tutto bene.
Quando invece chiudo la finestra madre mentre la figlia e' aperta
si manifesta l'errore runtime sul codice JScript della finestra figlia
e il debugger evidenzia window.opener.location.reload();  con
il messaggio di autorizzazione negata.
Se metto un alert(window.opener.closed); poco prima dell'
if nella funzione verifica() quando chiudo la finestra madre
mi da false.  E false me lo dice anche il debugger.
Ma perche' mai se la finestra madre e' chiusa ? O quasi chiusa (?)
Ho provato a mettere un setTimeout(";",2000) per dargli tempo
di rendersi conto che la madre e' chiusa. Niente da fare.
Con MSIE4 non c'e' opener.closed
Adesso vado a provare su un'altra configurazione.

Su NS non lo so.
Su NS va benone
ho trovato questo riferimento: quanto hai rilevato e' un bug noto
[ meno che a me e a te pare...]
[ricomporre l' url se spezzata dal news reader]
-----------------------------------
http://support.microsoft.com/support/kb/articles/Q241/1/09.ASP?LN=EN-US&SD=gn&FR=0
-----------------------------------
In pratica fanno predisporre una variabile settata a true sulla
finestra figlia che l'onunload della madre setta a false e su quella
impostano il controllo
sgradevole no?
Saluti

>> >Se la madre e' stata chiusa posso saperlo dalla figlia ?
Questo e' ampiamente oltre al limite della pazzia, ma dal momento che
non rischio nulla se non un pubblico sbertucciamento 
[e ormai non sono piu' cosi' sensibile...e si impara anche cosi'...]
lo dico lo stesso
perche' non ricrearci un oggetto opener che settiamo noi a closed in
caso di errore?
nella figlia metto nella funzione verifica
<SCRIPT language="javascript">
function verifica (){self.onerror=function(){opener=new
Object;opener.closed=true; verifica();return true}
 if(opener&&!opener.closed) 
{window.opener.location.reload()}
else
{alert('la finestra che mi ha aperto e stata chiusa')}
}
</SCRIPT>
per provarla con le pagine che avevi proprosto un paio di messaggi fa
per test togli naturalmente
la chiusura della figlia all'onunload della madre 
sono pazzo, ma prima di scriverlo l' ho provato sul mio Ie5 win 98se e
almeno sul mio computer, con questo browser a quest'ora della sera
funziona...

 Object;opener.closed=true; verifica();return true}
  Very good. Ma forse new Object non e' molto
 compatibile con netscape. Vabbe' tanto era solo per MSIE

 compatibile con netscape. Vabbe' tanto era solo per MSIE
beh Netscape e' piu' sveglio di quanto non si creda...
e riesce senz'altro a costruire gli oggetti a prescindere da questo
mio script un tantinello azzardato...
Poi nella fattispecie e' un errore che in NS non si verifica e quindi
non scatta la creazione... e non lo sapremo mai ;-)