Newsgroup: it.comp.lang.javascript
Titolo: Explorere e la chiamata a new Array()

Come da oggetto sono incappato in un errore piuttosto strano. Non so se
sia una malagestione della memoria di JS da parte di IE o se sia
normale così.
Praticamente da una finestra di popup tento di allargare (o impostare,
fate voi) le dimensioni di un array presente nella finestra chiamante
con:
window.opener.vServizi[0] = new Array(5);
alert(window.opener.vServizi[0].lenght);
Fin qui tutto ok. Mi viene mostrato l'alert che indica che l'elemento 0
dell'array nella finestra opener è di 5 elementi.
Se poi nella opener (dopo aver chiuso il popup) faccio click su un
pulsante di test con questo codice:
alert(window.vServizi[0].length);
mi viene mostrato quel poetico messaggio di Explorer che dice: "Il
chiamato (server [applicazione non server]) non è disponibile ed è
scomparso" ecc. ecc.
Da Firefox nessun errore.
Dopo svariati tentativi con diversi alert per capire dove potesse
essere il problema, ho avuto un dubbio: ma la memoria allocata per
l'array, quando chiamo new Array(), appartiene al popup e viene
distrutta quando lo chiudo?
Perchè è l'unica soluzione possibile.
Come rimedio ho creato una funzione nella finestra chiamante che fa il
new Array() e se invece di allocare direttamente da popup richiamo
quella funzione nella opener, allora va tutto liscio. Quindi a
riconferma di tutto non mi resta che pensare che Explorer utilizza la
memoria in questo modo...
O sto sbagliando io qualcosa?

 scomparso" ecc. ecc.
se i tuoi test sono stati fatti in modo corretto (mai testata una cosa
simile) immagino che il problema sia quello che dici (var creata comunque
nell'"area" della popup e poi in qualche modo distrutta quando la popup
viene chiusa).
Dichiara la var globale nella opener e sei a posto.
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

Si la vServizi è dichiarata e inizializzata nella opener con:
var vServizi = new Array(3);
for (i = 0; i<3; i++)
  vServizi[i] = new Array();
Così, giusto per avere i tre elementi inizializzati ad array vuoti.
Però se da popupo faccio:
window.opener.vServizi[0] = new Array(x);
quando chiudo la finestra di popup e nella opener faccio click su un
pulsante che uso per il test, l'accesso a vServizi[0].length mi dà
quell'errore.
Dici che dovrei dichiarare globalmente la vServizi nella opener. Ma non
basta dichiarare semplicemente vServizi nella sezione codice js?
Intanto mi documento sulle variabili "globali"...

Ok, da un primo giro su google pare non ci sia nulla di particolare per
le variabili globali. Cioè non esiste una sintassi apposita. basta
dichiarare le variabili fuori da qualsiasi funzione (ovviamente,
altrimenti sarbbero locali) e preferibilmente subito dopo il tag
"<script>".
Che in fin dei conti è quello che ho fatto.
Quindi mi sa che è proprio un problema di IE. Ora che torno a lavoro
ricontrollo, giusto per conferma, se la vServizi l'ho dichiarata prima
di qualsiasi funzione. Ma tanto so già che è così...
Mi sa mi sa che devo arrendermi a richiamare delle funzioni apposite
nella opener...
:( Che brutta cosa :(

 var vServizi = new Array(3);
dentro o fuori da una function?
togli il var per sicurezza

 togli il var per sicurezza
Uhm... ok proverò. Quello è sicuro che c'è.

Ok, fatto un test ex-novo e con Explorer non va ancora.
Se dalla popup assegno un nuovo array alla variabile della opener,
quando chiudo la popup quell'array diventa inutilizzabile.

 O sto sbagliando io qualcosa?
No, è corretto. Nel caso ti potesse servire in futuro, aggiungo che anche il
document.createElement() su IE si comporta nel medesimo modo (ovvero
l'elemento creato "appartiene" al document di cui si è invocato il metodo).
-- 
~ Io non soffro di pazzia, ne godo ogni minuto.
(I don't suffer from insanity, I enjoy every minute of it)