Originariamente inviato da Xinod
mi sembra sia un bug conosciuto da tempo e mai risolto:
new Option da popup non funziona
come dice Pietro, l' unica e' avere la funzione che aggiunge le option nella pagina madre e passare a questa i valori opportuni
ciao
Sinceramente non sapevo di questo bug
io ci sono incappato ed ho risolto a modo mio.
Comunque, facio un esempio un poco più concreto, ho A che chiama B.
In A posso aprire B normalmente con una popup o con una finestra modale, oppure posso aprirla in un iframe. B non sa come è aperta. Se B deve restituire dati al chiamante io lo immagino come una chiamata tipo CallBack delle finestre di Windows.
Allora B apre A con una funzione del tipo
var w_apri_assegna_funzionario = null;//è globale per poter essere chiusa nell'evento unload
function apri_assegna_funzionario(id_assegnazione, id_pratica, miniere_cave, id_utente, v)
{***}
subito dopo implemento la funzione di Callback
function callback_scelta_funzionario( funzionario, in_carico_da, note ){***}
Allora io A ricevo la chiamata da B che mi passa i parametri concordati ed è compito mio usarli, non di B
Dal suo canto B ha concordato che da qualche parte, qualche pagina si aspetta dei dati di ritorno, perciò fa le chiamate di Callback
if(chiamante && chiamante.callback_scelta_funzionario)
{
chiamante.callback_scelta_funzionario( funzionario, in_carico_da, note );
}
chiamante è una funzione di libreria tipo:
codice:
/*-----------------------------------------------------
//Restituisce un riferimento al chiamante
//Uso var chiamante = getChiamante();
//altro esempio
// if(getChiamante().location.href == window.location.href)
// alert("chiamante chiuso");
// else
// alert("chiamante aperto");
------------------------------------------------------*/
function getChiamante()
{
var sData = window.dialogArguments;
if(sData == undefined)
{
if(opener == undefined)
{
var p = self.parent;
//se sono dentro un IFRAME restituisco il parent, altrimenti
//se sono dentro un FRAME, restituisco self
return (p.document.getElementsByTagName("body").length == 0)? self: p;
}
else if (typeof(opener.document) == 'unknown')
return self;
else
return opener;
}
else
{
if(sData.document)
return sData;
else
return self;
}
}
Adesso, il codice può essere corretto, ma la logica mi pare obiettivamente corretta specialmente quando la pagina B può venire chiamata da diverse pagine e ciascuna usa i dati di ritorno in modo diverso