Abbiamo visto che dalla pagina in cui è incorporato il filmato, possiamo modificare il contenuto della pagina stessa, e di tutte le altre pagine che fanno parte dello stesso frameset. Questo è possibile grazie a delle proprietà comuni a tutte le pagine html, top, self, parent.
Oltre a questi riferimenti, ne abbiamo a disposizione un altro paio, molto interessanti. Il primo è il riferimento alla pagina che ha aperto, come popup, quella da cui vogliamo eseguire il codice: opener. Il secondo, il cui nome viene definito dall'utente, è quello alla pagina che viene aperta come popup.
.opener
Per questo esempio, non definiremo il codice javascript nella pagina html, ma lo eseguiremo direttamente dal filmato: ricordo però che definire la funzione nella pagina e richiamarla dal filmato, o eseguire il codice direttamente in Flash, ha gli stessi identici effetti (tranne talvolta la necessità del void(0)).
Guardando l'esempio, la prima pagina che ci si presenta contiene un filmato in Flash, all'interno del quale c'è un pulsante con associato il seguente script:
on(release){
getURL("javascript:window.open('pagina3.html','PaginaFiglia',[attributi]);void(0)");
dove, al posto di [attributi], è scritto (omesso per ragioni di spazio):
toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes
Il pulsante apre, come popup, una nuova pagina, all'interno della quale c'è un altro filmato. In questo filmato sono presenti due pulsanti: il primo serve a cambiare il contenuto della pagina madre, il secondo a chiuderla. I codici:
on(release){
getURL("javascript:window.opener.location.href='pagina.html';void(0)");
}
on(release){
getURL("javascript:window.opener.close();void(0)");
}
Il risultato:
visualizza l'esempio | scarica l'esempio
Notazione importante:
se la pagina madre è a sua volta una popup, alla richiesta di chiusura dalla pagina figlia, si chiuderà silenziosamente. Se invece è una pagina principale del browser, apparirà l'alert per la richiesta di conferma.
.pagina figlia
Per modificare invece la pagina aperta come popup, dobbiamo salvare un riferimento ad essa al momento dell'apertura. Lo facciamo attribuendolo come valore ad una variabile, che rimane nella pagina html.
Anche in questo esempio, la prima pagina che troviamo contiene un filmato. Al primo pulsante è associato il seguente script:
on(release){
getURL("javascript:figlia = window.open('pagina3.html','PaginaFiglia',[attributi]);void(0)");
}
Apre la popup, e ne salva un riferimento nella variabile figlia. Al secondo pulsante, per la modifica del contenuto, è associato:
on(release){
getURL("javascript:figlia.location.href='pagina.html';void(0)");
}
Al terzo pulsante, per la chiusura:
on(release){
getURL("javascript:figlia.close();void(0)");
}
visualizza l'esempio | scarica l'esempio
Notazioni importanti:
1. il nome della variabile figlia è del tutto arbitrario, e quindi può essere sostituito senza alcun problema. L'importante è essere coerenti nell'utilizzo: se salviamo il riferimento nella variabile pippo, dobbiamo usare pippo per la modifica della pagina figlia.
2. quando per modificare la pagina figlia clicchiamo nuovamente sulla pagina madre, la pagina figlia scompare sotto quest'ultima. Per fare in modo che torni davanti, dobbiamo imporre il focus alla nuova pagina. Lo facciamo mettendo nel body:
<body onLoad="self.focus()">
Nel nostro caso, ad esempio, la modifica va fatta in "pagina.html", quella con cui modifichiamo il contenuto della pagina figlia.