Newsgroup: it.comp.lang.javascript
Titolo: Sapere se una finestra è già aperta?

Ciao a tutti,
devo aprire una popup e, nel caso fosse già aperta, vorrei semplicemente
darle il focus, senza aprirne una nuova. Ho cercato in lungo e in largo su
google, letto tutte le FAQ su 
jsdir.com
, etc., ho trovato un sacco di codice
che fa proprio questo, ma tutti hanno lo stesso problema: dopo che ho aperto
la/le popup, se faccio un refresh della finestra madre, perdo tutti i valori
già impostati e quindi il codice "perde" i riferimenti alle popup che sono
già state aperte...
Non esiste un qualche cosa che mi restituisca l'elenco delle popup
correntemente aperte (tipo la collection Forms in VB6) cosicché io possa
controllarne il loro nome e decidere se aprirne una nuova oppure no?
Grazie!
bitView

 ha scritto nel messaggio
news:032ub.33114$9_.13...@news1.tin.it...


 nuovamente.
Grazie, ci stavo pensando, ma la lascerei proprio come ultima spiaggia...
:-) non piace neanche a me...
bitView

 già state aperte...
Non capisco quale sia il problema: se la finestra è stata aperta con
javascript, utilizzando window.open(pippo.htm','pluto',condizioni),
qualunque nuova finestra aperta con
window.open(paperino.htm','pluto',condizioni) si aprirà nella finestra
precedente, se è ancora aperta, o in una nuova solo se la precedente è stata
chiusa. Dipende dal nome 'pluto', che identifica in quale finestra aprire il
popup.
Se invece pippo.htm è stata aperta digitando l'indirizzo nel browser (se non
era un popup), il discorso è più complicato, e penso che bisogna ricorrere,
effettivamente, ad un cookie. Almeno così ho fatto il nel mio sito
(
http://www.soloclassica.it
).
Si può notare che le espressioni:
1) <A HREF="dodecafonia.htm" TARGET="teoria">dodecafonico</A> (HTML)
2) window.open(dodecafonia.htm','teoria',condizioni) (javascript)
3) appletContext.showDocument(nomeurl,'teoria'); (java)
 producono l'apertura delle pagine nella stessa finestra, se già aperta (ma
è bene evitare che il nome della finestra cominci per "_", tipo
TARGET="_new")

 controllarne il loro nome e decidere se aprirne una nuova oppure no?
Pero' come ti e' gia' stato detto il tuo problema si risolve mettendo un nome univoco per ogni finestra pop-up (il secondo argomento della funzione open e non ""!)
Guarda questo semplice esempio:
<a href="#" onClick="open('myPage.htm','myWin1','width=200,height=200,status=no,toolbar=no');return false">
Crea Pop-Up [myWin1]</a><br>
<a href="#" onClick="myWin1Pointer=open('myPage.htm','myWin1','width=200,height=200,status=no,toolbar=no');setTimeout('myWin1Pointer.close()',2000);return false">
Cancella Pop-Up [myWin1] dopo 2 sec. (anche se hai fatto il Reload)</a>

 2) window.open(dodecafonia.htm','teoria',condizioni) (javascript)
Ovviamente, anche in questo caso, 2)
window.open('dodecafonia.htm','teoria',condizioni) (javascript)
Chiedo venia per la svista multipla...

 S'intende window.open('paperino.htm','pluto',condizioni) si aprirà nella


 ha scritto nel messaggio
news:sI4ub.42900$hV.16...@news2.tin.it...
Pero' come ti e' gia' stato detto il tuo problema si risolve mettendo un
nome univoco per ogni finestra pop-up (il secondo argomento della funzione
open e non ""!)
Purtroppo non si risolve... ok che se do' un nome univoco allora la popup
viene aperta nella stessa finestra, ma ammettiamo il seguente scenario:
MAIN PAGE: clicco su link e mi apre la popup
POPUP: clicco su link e visualizzo un'altra pagina nella pagina
MAIN PAGE: clicco su stesso link e *non* mi apre una nuova popup, ma *mi
porta* alla pagina originale nella popup, *non* in quella dove sono
attualmente (avevo cambiato pagina nella popup)
Il problema è proprio questo: non voglio nè fagli apparire una popup
differente, nè la pagina originale.
Se, per caso, fosse esistita una collection "Windows" avrei potuto ciclare,
vedere se era già aperta e, nel caso, dare il focus(), senza fare
window.open (che magari non crea una nuova popup, ma porta sempre all'URL
che gli specifichi).
Spero di essere stato chiaro... :-)
Grazie,
bitView

se fai un alert(typeof nometuawin) cosa ti restituisce (sia nel caso che
esista, sia che non esista)?

 differente, nè la pagina originale.
Non so se ho capito: vediamo.
1) Main: cliccando esegui "window.open('pippo.htm','pluto',condizioni)"
Risultato: si apre un popup (il cui nome è 'pluto', in cui viene caricata la
pagina 'pippo.htm'.
2) Popup: cliccando si esegue, poniamo, '<A
HREF="paperino.htm">paperino</A>', o anche
"window.open('paperino.htm','pluto',condizioni)".
Risultato: nella popup 'pluto, al posto di 'pippo.htm', si apre
'paperino.htm'.
3) Main clccando sul link di cui al punto 1) esegui nuovamente
"window.open('pippo.htm','pluto',condizioni)"
Risultato: se la finestra 'pluto' fosse stata chiusa, viene riaperta, e ci
si carica 'pippo.htm'. Se invece è ancora aperta, al posto di 'paperino.htm'
viene caricato 'pippo.htm'.
Non è questo che volevi?
Se invece tu volessi aprire una finestra diversa a seconda che sia già
aperta o no 'pluto' - tipo banner a rotazione - allora il discorso è un po'
più complicato (ma si potrebbe risolvere, penso, anche senza cookie con
quelche variabile che si incrementa quando si esegue window.open).
Se invece il problema è solo dare il focus ad una finestra che è già aperta,
basta inserire un <BODY ONLOAD="window.focus"> (vado a memoria; spero di non
sbagliare la sintassi) nel popup.
Se invece il problema è che il caricamento del popup è pesante, e vuoi
evitare che venga inutilmente ricaricato se già presente, il discorso è un
po' più complicato (ma perchè l'utente, se si è accorto che ci mette un po'
di tempo a caricare una pagina, dovrebbe ricliccare sul link quando la
pagina è ancora aperta? Mangia pane e volpe a colazione?).

 Non č questo che volevi?
No, non č questo. Seguendo il tuo esempio, vorrei che dopo il punto 3 nella
popup rimanga 'paperino.htm' e *non* ritorni a 'pippo.htm'.
In sostanza, non voglio modificare quello che l'utente sta facendo nella
popup, gli voglio lasciare tutto cosě com'č.
Grazie

 esista, sia che non esista)?
Non ho provato, posso farlo, però il problema è che se immagazzino l'oggetto
window (che rappresenta la popup) in una variabile (nella pagina principale)
e poi l'utonto mi fa il refresh, questa variabile viene azzerata e quindi
sembrerebbe che la popup non esista anche se, in realtà, magari è viva e
vegeta. Probabilmente rivolverei il problema usando i cookies, ma vorrei
evitare...
grazie

 esista, sia che non esista)?
function prova()
 {
  if(typeof win=="undefined")
{win=window.open('pippo.htm','pluto',width=700,height=500')
alert("Apro")}
else {alert("Non apro")}
  }
Il problema è che, se la finestra viene chiusa, esegue l'alert "Non apro",
come se nel popup fosse stata ricaricata un'altra pagina.

 come se nel popup fosse stata ricaricata un'altra pagina.
... e inoltre, il refresh della finestra principale comporta l'azzeramento
delle variabili...