Argomenti trattati: metodo showModalDialog() dell'oggetto window.
Nel discutere il metodo window.open(), è stato trattato il codice per creare
nuove finestre, indipendenti da quella che le ha generate (definita opener), che
vengono visualizzate sulla barra di stato.
In realtà è possibile aprire delle finestre dipendenti dalla pagina
principale, che da essa possono essere aperte e che non vengono visualizzate
sulla barra di stato (parliamo di piattaforma Windows).
Per ottenere questo tipo di finestre in Netscape è sufficiente aggiungere
l'attributo
dependent=yes
all'insieme della caratteristiche della finestra.
Usando MSIE è invece possibile utilizzare le finestre modali.
Queste permettono di caricare in una finestra di dialogo la pagina HTML che si
vole mostrare, oppure si può scrivere al loro interno con il metodo dell'oggetto
document document.write().
Finché l'utente manterrà aperta questa finestra, essa manterrà il focus e non
vi si potrà accedere dalla finestra che la ha aperta.
Il rapporto finestra principale-finestra secondaria, che è stato descritto
parlando del metodo dell'oggetto window window.open(),
viene dunque meno.
La sintassi è:
windiag=window.showModalDialog(URL [, argomenti_passati [, caratteristiche]]);
windiag è la variabile che rappresenta il valore restituito della finestra modale, e non l'istanza della finestra stessa all'interno della
pagina principale.
L'URL rappresenta l'indirizzo del documento HTML da caricare, e
possono inoltre essere passati un insieme di parametri che ne determinano le caratteristiche.
La finestra chiamante può passare un insieme di valori alla finestra di dialogo
(argomenti passati).
Caratteristiche: | |
---|---|
dialogHeight: |
numero che imposta l'altezza in pixel della finestra di dialogo; |
dialogLeft: | numero che imposta la posizione orizzontale della finestra a partire da sinistra; |
dialogTop: | numero che imposta la posizione verticale della finestra di dialogo, a partire dall'angolo in alto a sinistra; center: imposta se la finestra di dialogo è al centro dello schermo, con valori: yes, no oppure 1, 0; Di default, se non specificato, il valore è yes. |
dialogWidth: |
numero che imposta la larghezza in pixel della finestra di dialogo; |
help | permette di visualizzare o meno il pulsante di help sulla barra del titolo e accetta i valori 1,0 oppure yes o no |
maximize | permette di visualizzare o meno il pulsante maximize sulla barra del titolo e accetta i valori 1,0 oppure yes o no |
minimize | permette di visualizzare o meno il pulsante maximize sulla barra del titolo e accetta i valori 1,0 oppure yes o no |
border | permette di settare la dimensione del bordo |
status | imposta o meno la presenza della barra di stato |
scrollbars | imposta o meno la presenza della barra di scorrimento |
Quando le proprietà dialogLeft e/o dialogTop sono specificate, la proprietà
center viene sovrascritta.
Laddove vengono usati i valori 1, 0 oppure yes o no si possono utilizzare in
alternativa i valori on o off.
E' inoltre possibile usare la proprietà resizable
che indica se è premesso all'utente di ridimensionare la finestra.
Le caratteristiche della finestra modale corrispondono a quelle usate per i CSS.
Infatti, si possono impostare direttamente le proprietà font-family, font-style,
font-size
e font-weight.
Infine, la stringa usa come separatore il punto e virgola.
Segue un esempio:
features="dialogWidth=300;dialogHright=250;border=thick;status=yes";
La stringa accetterebbe come separatore tra la proprietà e il valore
prescelto anche i due punti, ossia:
features="dialogWidth:300;dialogHright:250;border:thick;status:yes";
Segue un esempio relativo alle finestre modali.
Questo è il codice che interessa la visualizzazione dello script nella finestra che richiama la finestra modale:
<!-- viene aggiunto un opportuno stile al documento della finestra che richiama la Modal Dialog --> <style> <!-- *{background-color:#FFFFCC} body{border:solid 3px red;background-color:#FFFFCC} A{text-decoration:none;color:#FF6666;font-weight:bold} <!-- notare lo stile per il tag DIV con ID writeretval, che crea una divisione visualizzata come un rettangolo verde all'interno del documento --> #writeretval{border:solid 3px red;position:absolute;top:25;left:25;padding:10;color:white;background-color:green;width:350;height:100;text-align:center} --> </style> <script language="JavaScript"> /* la funzione opendiag chiama la finestra di dialogo: - la variabile features viene valorizzata con una stringa corrispondente alle caratteristiche della finestra modale - vengono creati una serie di oggetti attraverso l'oggetto Object, che viene utilizzato dal linguaggio jscript ( il JavaScript versione Microsoft ) come precursore di tutti gli oggetti. Stiamo in pratica creando una serie di oggetti con 2 proprietà: -- name: corrispondente al nome di un colore; -- args: corrispondente al colore in esadecimale; - gli oggetti vengono passati all' Array arrObj, che a sua volta viene passato alla finestra modale come secondo argomento. Questo vuol dire che la finestra modale avrà a disposizione questi oggetti per elaborarli -- la variabile winurl viene valorizzata con l'indirizzo della pagina che sarà caricata nella finestra modale */ function opendiag() { features="dialogWidth=350px;dialogHeight=200px;dialogTop:250;dialogLeft:25;scrollbars=no;border=thick;help=off;status=off;resizable=off;font-family=arial;font-size=8pt;color=red"; // utilizzo l'oggetto Object per passare i parametri di riferimento alla finestra newObj1=new Object(); newObj1.name="bianco"; newObj1.args="#FFFFFF"; newObj2=new Object(); newObj2.name="verde"; newObj2.args="#669900"; newObj3=new Object(); newObj3.name="blu"; newObj3.args="#336699"; newObj4=new Object(); newObj4.name="giallo"; newObj4.args="#FFFF00"; newObj5=new Object(); newObj5.name="arancione"; newObj5.args="#FF9900"; newObj6=new Object(); newObj6.name="rosa"; newObj6.args="#FFCCCC"; newObj7=new Object(); newObj7.name="viola"; newObj7.args="#CC66FF"; newObj8=new Object(); newObj8.name="nero"; newObj8.args="#000000"; newObj9=new Object(); newObj9.name="marrone"; newObj9.args="#996600"; newObj10=new Object(); newObj10.name="grigio"; newObj10.args="#C0C0C0"; arrObj=new Array(newObj1, newObj2, newObj3,newObj4, newObj5, newObj6, newObj7, newObj8, newObj9, newObj10); winurl="windiag.htm"; // apro la finsetra di dialogo, assegnandola a windiag /*windiag rappresenta il valore di ritorno della finestra modale, cioé il valore che essa restituirà alla finestra chiamante*/ windiag=window.showModalDialog(winurl,arrObj, features); /* eseguo il controllo sul valore restituito: se il valore restituito non è una stringa vuota, sarà assegnato al colore di sforndo della divisione writeretval*/ if (windiag!="" && windiag!='undefined') document.all['writeretval'].style.backgroundColor=windiag; } </script> </HEAD> <!-- all'interno del tag <BODY> del documento viene creata la divisione con ID writeretval --> <div id="writeretval" > <a href="JavaScript:opendiag()">-- Scegli un colore dalla finestra di dialogo --</a> </div> |
Questo è il codice che interessa la visualizzazione dello script nella finestra modale:
<script Language="JavaScript"> <!-- // var keepVal=""; /* La funzione showObjs prende 2 parametri: - l'indice del valore selezionato nella select (quindi un numero) - l'oggetto select su cui avviene l'evento onChange() */ function showObjs(control,selection) { winform=document.diagform; if(control.options[selection].text!='') { winform.showval.value=window.dialogArguments[selection-1].args; keepVal=keepVal + winform.showval.value; } else document.diagform.showval.value="nessun valore selezionato"; } /*cliccando sul pulsante che chiude la finestra oppure chiudendo la dinestra, se è stato selezionato un colore, questo viene passato tramite la proprietà returnValue alla finestra principale, modificando il colore di sfondo della divisione contenuta nel documento */ function retVal()> { window.returnValue=keepVal; window.close(); } //--> </script>> </HEAD> <BODY BGCOLOR="#FFFFFF" onUnload="retVal()"> (...) <form name="diagform"> <script Language="JavaScript"> <!-- // //creo dinamicamente una select all'interno del documento della finestra modale document.writeln('<select name="diagsel" onchange="showObjs(this,this.selectedIndex)">') document.write('<option></option>') // assegno alla variabile dialogargs i valori passati alla finestra modale attraverso la finestra principale // viene usata la proprietà window.dialogArguments: in questo caso ottengo un Array di oggetti // bisogna notare che solo la finestra modale permette questo passaggio di valori dialogargs=window.dialogArguments; if (typeof(dialogargs)=='object') { for(i=0;i<dialogargs.length;i++) { if (dialogargs[i].name!='undefined') document.writeln('<option>' + dialogargs[i].name+ '</option>'); } } document.writeln('</select >'); textVal="nessun valore selezionato"; /* creo una casella di testo cui sarà passato il valore esadecimale di ogni colore selezionato tramite la funzione showObjs()*/ document.writeln('< input type="text" name="showval" value="' + textVal + '" size="' +( textVal.length + 2 )+ '" READONLY> '); //--> </script > <input type="button" name="setcolor" value="colora!" onclick="retVal()" > </form> (...) |