Riassumiamo: siamo riusciti ad eseguire codice Javascript sia da una pagina HTML, sia da un filmato Flash; abbiamo visto l'applicazione ad un filmato di un metodo per Flash; abbiamo eseguito questo metodo da una pagina HTML e da un filmato; abbiamo eseguito il metodo da un filmato perchè avesse effetto su un altro filmato della stessa pagina.
Prima di vedere il dettaglio dei metodi Javascript per Flash, ci mancano quindi solo un altro paio di esempi: esempi che non presentano nessuna tecnica nuova, ma che sono miscugli di cose già viste precedentemente all'interno di questa guida.
Esecuzione di un metodo in un altro frame
La pagina d'esempio è un frameset composto da due frame. Nel frame a sinistra abbiamo il filmato che chiama il metodo, nel frame a destra abbiamo la definizione del codice Javascript e il filmato sul quale viene applicato. Il filmato a sinistra non ha i tag per i metodi, il filmato a destra sì.
Codice del frameset
<html> <head> <title>Frameset</title> <script language="JavaScript" type="text/JavaScript"> <!-- function riempi() { this.moveTo(0,0); this.resizeTo(screen.availWidth, screen.availHeight); } //--> </script> </head> <frameset cols="*,*" framespacing="0" frameborder="no" border="0" onLoad="riempi()"> <frame src="sx.html" name="sx" noresize> <frame src="dx.html" name="dx" noresize> </frameset> <noframes><body></body></noframes> </html>
È utile puntalizzare un paio di aspetti:
- la funzione scritta nel frameset serve solo ad allargare la pagina fino a riempire lo schermo, e non ha a che vedere con il nostro esempio
- i frame che compongono il frameset si chiamano
dx
esx
, e il fatto che così si chiamino le pagine HTML in essi contenute, lo ripeto, è solo accidentale
Codice della pagina HTML di sinistra
(filmato che chiama la funzione Javascript nell'altro frame)
<html> <head> <title>sx</title> </head> <body bgcolor="#339999"> <object classid="[...]" codebase="[...]" width="400" height="300"> <param name="movie" value="sx.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#cccccc" /> <embed src="sx.swf" quality="high" bgcolor="#cccccc" width="400" height="300" type="[...]" pluginspage="[...]"> </embed> </object> </body> </html>
Anche qui soffermiamoci su alcuni aspetti:
- l'assenza di funzioni Javascript, definite invece nell'altra pagina
- l'assenza dei tag per i metodi Javascript: il filmato richiama un codice, ma non lo subisce. I tag sono quindi definiti per il filmato nell'altra pagina
Codice della pagina di destra
(filmato sul quale agisce il metodo Javascript)
<html> <head> <title>dx</title> <script language="JavaScript" type="text/JavaScript"> <!-- function avviaFilmato() { var IE = navigator.appName.indexOf("Microsoft") != -1; var filmato = IE ? window.mainMovie : window.document.mainMovie; filmato.Play(); } //--> </script> </head> <body bgcolor="#006699"> <object classid="[...]" codebase="[...]" width="400" height="300" id="mainMovie"> <param name="movie" value="dx.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <embed src="dx.swf" quality="high" bgcolor="#ffffff" width="400" height="300" name="mainMovie" swLiveConnect="true" type="[...]" pluginspage="[...]"> </embed> </object> </body> </html>
Qui notiamo:
- la definizione della funzione Javascript che chiameremo dal frame di sinistra
- i tag di incorporamento per i metodi Javascript
Al pulsante del filmato di sinistra è associato questo script:
on(release){ getURL("javascript:parent.dx.avviaFilmato()"); }
Il risultato
Attenzione! Il codice indicato sopra può essere sostituito questo:
on(release) { getURL("javascript:avviaFilmato()", "dx" ); }
Come già spiegato precedentemente, con solo l'indicazione del nome del frame come secondo parametro del getURL()
, Flash riesce a raggiungere il frame indipendentemente dal suo grado di annidamento: utilizzando invece la notazione HTML, bisogna anche indicare parent
.
Questo metodo risulta forse anche più semplice, soprattutto quando il frame è chissà dove. Ma ripeto, funziona solo quando c'è un unico frame ad avere quel nome. In una situazione di omonimia tra frame, come quella in figura, Flash fa riferimento al frame più vicino, e non ci permette di arrivare all'altro.
Frameset con nomi ripetuti
Per questo motivo, se il nostro frameset è composto da soli due frame, è comodo usare il metodo dei due parametri, altrimenti è sempre meglio usare la notazione HTML. Ad ogni modo, quando non c'è differenza tra i due, indicherò entrambi.