Newsgroup: it.comp.lang.javascript
Titolo: Chiudere Finestra senza Handle

Posso chiudere una finestra senza aver l'handle ?
Grazie

> Posso chiudere una finestra senza aver l'handle ?
Eh, senza cosa?
Cosa intendi?


Credo intenda (correttamente) come handle il puntatore (termine improprio,
meglio handle, appunto) alla finestra, quello che ti restituisce ad esempio
la funzione window.open()
La risposta alla domanda originale credo sia no, non è possibile.
Ciao
Ema


Eghimi!
Per me, handle vuol dire maniglia/manico.
E' quindi uno strumento che ti serve (anche nella vita reale) per maneggiare
qualche oggetto.
Una cosa simile e' un puntatore, termine che pero' viene usato tipicamente
per gli "oggetti" di un linguaggio di programmazione (oggetti, variabili).
Un puntatore e' un qualcosa che punta ad un oggetto, e' un qualcosa che ti
permette di raggiungere quell'oggetto. In pratica un puntatore e' un
indirizzo di memoria.
Il puntatore ad una variabile e' l'indirizzo di memoria (la RAM!!!) dove la
variabile viene salvata. Quindi il puntatore ti serve per accedere alla
variabile.
In alcuni linguaggi l'esistenza dei puntatori e' evidente, in altri e'
nascosta, ma questa e' un'altra storia.
Tornando all'esempio.
Per chiudere una finestra, devo dire al javascript che finestra chiudere.
Javascript e' un linguaggio che supporta gli oggetti. Le finestre sono viste
come oggetti.
La sintassi per chiudere una finestra e' oggetto.close()
window.close() chiude la finestra corrente perche' "window" e' la variabile
oggetto (o se vuoi, chiamiamolo handle) che ti permette di riferirti (e di
maneggiare) alla finestra corrente.
Quando faccio una window.open(), mi viene restituito l'handle alla nuova
finestra aperta.
new_win = window.open();
cosicche', grazie a "new_win" (un altro handle), posso adesso agire anche
sulla nuova finestra (sempre rimanendo in quella corrente).
Ad esempio potrei fare:
new_win.close();
Credo che a Max mancasse proprio qualcosa per riferirsi ad una finestra, che
non e' quella corrente (perche' quella corrente e' sempre accessibile
tramite "window").
Se ad esempio in una pagina pag1.htm apri una nuova finestra con
new_win = window.open("pag2.htm");
e poi fai il Refresh di pag1.htm la variabile new_win si e' persa il valore
che si riferiva alla nuova finestra e quindi non potrai piu' chiudere
quest'ultima dalla pagina pag1.htm.
Sei sempre li' o stai dormendo? Spero di non aver annoiato.
Beh, that's all.
Resto comunque a disposizione, per quanto mi e' possibile.
Ciao,
Ema

 Grazie
E di grazia, in che modo la identificheresti per poterla chiudere? :)
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 la funzione window.open()
Mhmm.. no, non sono d'accordo.
JS non ti restituisce "l'handle" della finestra quando fai operazioni 
tipo "window.open()", ti restituisce direttamente l'oggetto finestra, o 
volendo il "puntatore" a tale oggetto.
L'handle, ad esempio il classico HWND delle tanto care API di Windows, 
e' una sorta di ID (numerico, o cmq classe analoga), che non rappresenta 
la finestra in se', ma - appunto, come spieghi successivamente - e' una 
sorta di "aggancio" alla quale riferirci in caso dovessimo lavorarci.
Recuperato l'handle di una finestra, per poter maneggiare la finestra 
dobbiamo passare il suddetto a delle API. L'handle non e' una struttura 
complessa. E' un identificativo.
D'altro canto, JS e' un linguaggio orientato a "oggetti" (non "classi", 
come Java o C++..Si, lo so che si chiama OOP in tutti i casi, ma la 
differenza tra classes e prototypes e' rilevante :) ), funzioni come la 
window.open() ci restituiscono un oggetto di tipo finestra, con tutti i 
relativi metodi, eventi e proprieta'. E' una struttura dati complessa, 
non un semplice identificativo. E' un "puntatore" ad un "oggetto" di 
tipo "window".
Anche solo concettualmente, e' piu' vicino all'idea di *effettivo* 
pointer (che non e' ) che useresti in C++, piuttosto che a un HWND.



A parte che qua si va sul filosofico, forse, ma alla fin fine handle e
puntatori non si assomigliano un po'?
Intanto entrambi servono per raggiungere e gestire una certa risorsa
(variabili, oggetti, finestre; che alla fin fine poi tutte queste cose sono
rappresentate da sequenze di byte in memoria).
Poi tu definisci handle come un identificativo.
Ma forse anche un puntatore puo' essere considerato un identificativo: e' un
identificativo di un indirizzo di memoria.
Secondo me e' solo che in certi contesti e' usuale usare il termine handle
(perche' magari e' un concetto di piu' alto livello) ed in altri il termine
puntatore.
Ad esempio, volendo implementare un certo algoritmo, nella descrizione in
pseudo-codice dell'algoritmo potremmo utilizzare il termine handle per
riferirci ad una cosa che poi verra' implementata con un puntatore del
linguaggio di programmazione utilizzato.
Boh, che ne pensi? Ho delirato? Mi sembra che te ne intenda parecchio e mi
piacerebbe avere un tuo riscontro (e non fare facili battute su correnti di
vento che ti fanno venire il raffreddore - doh! L'ho fatta io:-)))
Ciao,
Ema

 vento che ti fanno venire il raffreddore - doh! L'ho fatta io:-)))
Ehehe :P No, non sempre faccio battute sceme.. Spesso. Ma non sempre. :)


 Se capisci cosa intendo.
Credo di capire.
Evidentemente il mio errore e' di cercare di capire come funzionano le cose
a basso livello e spesso poi faccio una frittata di concetti.
Ok, condivido tutto cio' che scrivevi dopo, ma non lo sto quotare.
Grazie per il tempo speso a cercare di capire il prodotto di questa mente
contorta.
Un saluto da un uomo afflitto dal tedioso problema delle "handle"
dell'amore... tanto per rimanere in tema (di battute sceme, intendo:-))
Ciao,
Ema

 contorta.
Ma di cosa, sono discussioni che fanno sempre bene. Se ti va di capire 
come funziona a basso livello JS, puoi scaricarti i sorgenti C++ di 
SpiderMonkey l'interprete di JS di Netscape/Mozilla.
Ma ricordati che il "cosa" si realizza (in termini di basso livello) e' 
diverso dal "come" si realizza.
