Quick Tips: Hvordan kommunisere mellom Flash og JavaScript

Quick Tips: Hvordan kommunisere mellom Flash og Javascript
to
Del
en
Del

Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.

I denne hurtig Tip, vil vi se på hvordan du bruker ExternalInterface klassen. Dette gir oss muligheten til å skrive AS3 som kan kjøre Javascript-kode, og vice-versa. Det betyr at du kan bruke Flash til å endre deler av nettsiden som er det som kjører




Trinn 1: Sett opp Flash Document

Opprett en ny Flash Actionscript 3 dokumentet. Endre størrelsen på scenen for å være 600x300. Med rektangel verktøy, trekke ut et rektangel som er størrelsen av scenen. Gi det en farge av #CCCCCC. Dessuten gir det en svart strek over 2px



Trinn 2:. Sett opp Flash UI

Her er oppsettet vi skal jobbe mot:

Åpne Components Panel (Vindu > Components), og fra brukergrensesnittet mappe, drar en ColorPicker komponent på scenen. Gi den en forekomst navnet "cp '

Neste skape et dynamisk tekstfelt som heter" resizeText.'; sted og størrelse det slik du kan (du kan ikke se den i mitt bilde, det er tomt, og øverst til høyre på scenen.)

Nå opprette en dynamisk tekstfelt. Gi den en forekomst navnet "jsText '. Deretter oppretter du en knapp symbol og gi den en forekomst navnet "rask". Etter det, opprette en annen knapp, og gi den en forekomst navnet "endre".

Til slutt oppretter to inngangstekstfelt. Plasser en ved siden av "rask" -knappen, og gi den et navn av "promptText '. Ta andre tekstfeltet, flytte den ved siden av "endre" knappen og gi den navnet 'changeText'

Også legge alle etiketter du ønsker.; referere til mitt bilde for å se hvordan jeg setter det opp



Trinn 3:. Sett opp HTML UI

For at ExternalInterface å jobbe, har dokumentet for å være på den internett. Først oppretter du en ny tekstfil og lagre den som 'externalInterface.html'. Deretter åpner en teksteditor og legge all koden under. Lagre HTML-filen
< html xmlns = "http://www.w3.org/1999/xhtml" xml:. Lang = "no" lang = "no" > < head > < meta http -equiv = "Content-Type" content = "text /html; charset = iso-8859-1" /> < title > externalInterface < /title > < style type = "text /css" > body {font -Family: Arial;} # asSend {padding-top: 20px; font-size: 12px;} # htmlWrap {margin-top: 10px; width: 578px; padding-left: 20px; border-width: 1px; border-style: solid;} # avsender {margin-top: 10px;} # textChange {font-size: 13px; font-weight: bold; padding-top: 10px; padding-bottom: 20px;} < /style > < /head > < body > < objekt classid = "CLSID: d27cdb6e-ae6d-11cf-96b8-444553540000" kodebase = "http: //download.macromedia. com /pub /shockwave /drosjer /flash /swflash.cab # version = 9,0,0,0 "width =" 600 "height =" 300 "id =" externalInterface "align =" middle "> < param name = "allowScriptAccess" value = "samedomain" /> < param name = "allowFullScreen" value = "false" /> < param name = "movie" value = "externalInterface.swf" /> < param name = "kvalitet" value = "high" /> < param name = "bgcolor" value = "# ffffff" /> < embed src = "externalInterface.swf" kvalitet = "high" bgcolor = "# ffffff" width = "600" height = "300" name = "externalInterface" align = "middle" allowScriptAccess = "samedomain" allowFullScreen = "false "type =" application /x-shockwave-flash "pluginspage =" http://www.macromedia.com/go/getflashplayer "/> < /object > < div id =" htmlWrap "> < div id = "asSend" > < label for = "textarea" > Send til Actionscript: < /label > < br /> < textarea kolonner = "50" rader = "4" id = "textarea" name = "textarea" > < /textarea > < br /> < knappen id = "avsender" name = "avsender" > Send < /knapp > < /div > < div id = "textChange" > Bruk Action å endre meg <! /div > < /div > < /body > < /html >

De viktigste områdene er:

< objekt > delen, som bygger den SWF du vil lage fra Flash-filen

<. div > s og < textarea >, som har id
egenskaper, slik at vi kan få tilgang til dem fra SWF

HTML ditt bør vises som nedenfor:..

Når koden er blitt byttet ut, laste opp filen til din webserver, slik at vi kan komme i gang med Action



Trinn 4: Sett opp et dokument Class

Opprett et dokument klasse for Flash-fil; kalle det Main.as. Hvis du ikke er kjent med dokumentet klasser, les denne Quick Tips
pakke {import flash.display.MovieClip.; public class Hoved strekker MovieClip {offentlig funksjon main () {}}}



Trinn 5: Ringe Javascript-funksjoner fra Flash

Det første vi skal gjøre med den ExternalInterface er kalle en Javascript-funksjon som vil endre bakgrunnsfargen på vår nettside. Så, feste en hendelse lytteren til vår ColorPicker komponent. Når fargeendringer, vil det sende hex verdien til en javascript funksjon kalt receiveColor ():
pakke {import fl.events.ColorPickerEvent; import flash.display.MovieClip; import flash.external.ExternalInterface; public class Hoved strekker MovieClip {offentlig funksjon main () {cp.addEventListener (ColorPickerEvent.CHANGE, colorChange); } Offentlig funksjon colorChange (event: ColorPickerEvent): void {ExternalInterface.call ("receiveColor", event.target.hexValue); //kaller receiveColor (event.target.hexValue) i javascript}}}

Nå må vi skrive dette receiveColor () -funksjonen. I hodet på vår HTML-dokument, starter vi script ved å definere denne funksjonen. Det tar rett og slett verdien sendt til den fra Flash og endrer bakgrunnsfargen
. ≪ script type = "text /javascript" > funksjon receiveColor (verdi) {document.bgColor = "#" + verdi;} < /script >

Sett at rett etter < head > i HTML-fil. Hvis alt er vel, når du kjører HTML-siden i en nettleser og endrer farge i ColorPicker, bør det endre bakgrunnsfargen på nettsiden



Trinn 6:. Ringe Actionscript-funksjoner fra Javascript

Det neste eksemplet vil være å sende data fra Javascript for å Flash. I HTML-dokument, lime inn følgende kode i < script > Tag du har lagt i det siste trinnet:
window.onload = function () {var avsender = document.getElementById ("avsender"); //getElementById finner et element i henhold til sin "id" eiendom sender.onclick = function () {var TA = document.getElementById ("textarea"); dokument ['externalInterface'] receiveText (ta.value.); ta.value = ""; };};

Her er hva dette betyr: etter at dokumentet er lagt, får vi den "avsender" -knappen og sett en hendelse lytteren til det. Når 'avsender' knappen klikkes, vil det ringe receiveText () -funksjonen i Flash som vi vil sette opp nå.

Tilbake i Flash, forteller vi ExternalInterface å registrere Actionscript-funksjonen slik at det kan være kalles fra Javascript. Deretter setter vi opp vår receiveText () -funksjonen:
pakke {import fl.events.ColorPickerEvent; import flash.display.MovieClip; import flash.external.ExternalInterface; public class Hoved strekker MovieClip {offentlig funksjon main () {cp.addEventListener (ColorPickerEvent.CHANGE, colorChange); ExternalInterface.addCallback ("receiveText", receiveText); //tillater Javascript for å få tilgang til receiveText () -funksjonen. } Offentlig funksjon colorChange (event: ColorPickerEvent): void {ExternalInterface.call ("receiveColor", event.target.hexValue); } //Dette er den nye receiveText funksjon offentlig funksjon receiveText (verdi: String): void {jsText.text = verdi; }}}

(Nye linjer er 5, 9 og 16-19.)



Trinn 7: Calling Javascript varsler, Bekrefter og ber fra Action

Vi kan også ringe varsler veldig enkelt fra Actionscript. Her er vi rett og slett fortelle ExternalInterface å kalle en "rask". Vi kan også bruke ExternalInterface å sende parametre til funksjoner. Her forteller vi den "rask" -funksjonen til å be brukeren hans eller hennes navn. Når vår bruker entrer info, er det gått tilbake til "promptText 'tekstfeltet
pakke {import fl.events.ColorPickerEvent.; import flash.display.MovieClip; import flash.external.ExternalInterface; public class Hoved strekker MovieClip {offentlig funksjon main () {cp.addEventListener (ColorPickerEvent.CHANGE, colorChange); ExternalInterface.addCallback ("receiveText", receiveText); prompt.addEventListener (MouseEvent.CLICK, promptClick); //gjør promptClick () løp når teksten knappen klikkes} offentlig funksjon colorChange (event: ColorPickerEvent): void {ExternalInterface.call ("receiveColor", event.target.hexValue); } Offentlig funksjon receiveText (verdi: String): void {jsText.text = verdi; } //Funksjon som skal kalles når teksten klikkes. Vil be om brukerens navn ved hjelp av en JS teksten. offentlig funksjon promptClick (event: MouseEvent): void {promptText.text = "Du sa navnet er:" + ExternalInterface.call ("rask", "Hva er ditt navn"); }}}

(Nye linjer er 10 og 21-24.)



Trinn 8: Calling Anonymous Javascript-funksjoner

En annen ting vi kan gjøre er å skrive våre egne Javascript-funksjoner som strenger, og deretter ringe dem fra ExternalInterface. Her skaper vi en Javascript-funksjon som mottar en parameter. Vi tar som parameter og tilordne verdien til innerhtml egenskap av vår 'textChange' div i HTML-dokumentet. Du vil merke at det er ingen eksterne Javascript-funksjoner blir kalt - det er alt som finnes i Action
pakke {import fl.events.ColorPickerEvent;. import flash.display.MovieClip; import flash.external.ExternalInterface; public class Hoved strekker MovieClip {offentlig funksjon main () {cp.addEventListener (ColorPickerEvent.CHANGE, colorChange); ExternalInterface.addCallback ("receiveText", receiveText); prompt.addEventListener (MouseEvent.CLICK, promptClick); change.addEventListener (MouseEvent.CLICK, changeClick); //gjør changeClick () løp når endringen knappen klikkes} offentlig funksjon colorChange (event: ColorPickerEvent): void {ExternalInterface.call ("receiveColor", event.target.hexValue); } Offentlig funksjon receiveText (verdi: String): void {jsText.text = verdi; } Offentlig funksjon promptClick (event: MouseEvent): void {promptText.text = "Du sa navnet er:" + ExternalInterface.call ("rask", "Hva er ditt navn"); } //Endrer teksten i HTML for å matche tekstfeltet innenfor Flash offentlig funksjon changeClick (event: MouseEvent): void {ExternalInterface.call (". Funksjon (param) {document.getElementById ('textChange') innerhtml = param;}" , changeText.text); changeText.text = ""; }}}

(Nye linjer er 11 og 26-30.)



Trinn 9: Calling Anonymous Javascript og Actionscript-funksjoner

Til slutt, vi kan kalle anonyme funksjonene både sider. I "anonym" -funksjonen, vi registrerer en anonym Actionscript-funksjonen med ExternalInterface. Funksjonen fyller litt tekst, og deretter starter en tidtaker. Neste, vi kaller en anonym Javascript-funksjon. Denne funksjonen forteller vinduet, når det er blitt endret størrelse, må det ringe tilbake til vår anonyme Actionscript-funksjonen
pakke {import fl.events.ColorPickerEvent.; import flash.display.MovieClip; import flash.external.ExternalInterface; public class Hoved strekker MovieClip {offentlig funksjon main () {cp.addEventListener (ColorPickerEvent.CHANGE, colorChange); ExternalInterface.addCallback ("receiveText", receiveText); prompt.addEventListener (MouseEvent.CLICK, promptClick); change.addEventListener (MouseEvent.CLICK, changeClick); //oppretter et nytt tidsur med ett sekund tick, og legge til en hendelse lytteren Var timer: Timer = new Timer (1000); timer.addEventListener (TimerEvent.TIMER, onTimer); anonym(); //setter opp de anonyme funksjoner} offentlig funksjon colorChange (event: ColorPickerEvent): void {ExternalInterface.call ("receiveColor", event.target.hexValue); } Offentlig funksjon receiveText (verdi: String): void {jsText.text = verdi; } Offentlig funksjon promptClick (event: MouseEvent): void {promptText.text = "Du sa navnet er:" + ExternalInterface.call ("rask", "Hva er ditt navn"); } Offentlig funksjon changeClick (event: MouseEvent): void {ExternalInterface.call (". Funksjon (param) {document.getElementById ('textChange') innerhtml = param;}", changeText.text); changeText.text = ""; } //Fjerne teksten etter ett sekund har gått offentlig funksjon onTimer (event: Timerevent): void {resizeText.text = ""; timer.stop (); } Offentlig funksjon anonym (): void {//se hvordan vi definerer en funksjon inne i en annen funksjon? ExternalInterface.addCallback ("anon", function () {resizeText.text = "Vinduet er endret."; Timer.start ();}); //samme gjelder her ExternalInterface.call ("function () {window.onresize = function () {document ['externalInterface'] anon ();.};}"); }}}

(Nye linjer er 13-17 og 37-52.)



Konklusjon

ExternalInterface er en ekstremt kraftig og nyttig klasse. Med det kan du motta verdier og hendelser, alle utenfor SWF. Ha det gøy med det, og takk for lesing! Anmeldelser