Javascript og Action Converse: Introduksjon til ExternalInterface

Javascript og Action Converse: Introduksjon til ExternalInterface
Del
Del
en
Del

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

Actionscript og Javascript. Begge disse språkene er stor på egen hånd, men har du noen gang lurt på hva du kan gjøre hvis de kunne snakke med hverandre? Vel du er på hell! Det er der den ExternalInterface Klasse kommer inn i bildet. Følg meg som jeg lære deg det grunnleggende

Foto: Dave Spellman



Trinn 1:.. Den ExternalInterface Class Anmeldelser

Hvor kan jeg bruke det

Foreløpig ExternalInterface Class er tilgjengelig i følgende nettlesere:?

Internet Exlplorer 5.0+

Netscape 8.0+

Mozilla 1.7.5+

Firefox 1.0+

Safari 1.3 +

Hva kan jeg gjøre med det?

ExternalInterface Class kan du:...

Ring en Javascript-funksjonen fra Action

Ring noen Action funksjon fra Javascript

Pass argumenter og paramters mellom de to

Motta en returverdi fra en Javascript-funksjon

Retur en verdi til en Javascript-funksjon

Trinn 2:.. La oss lage vår HTML-side

Vi vil hoppe rett inn i dette og starte med en veldig grunnleggende eksempel. Først må vi lage vår HTML-side, så fyre opp din favoritt HTML Editor og la oss starte. Lag en form inni HTML
. ≪! DOCTYPE html PUBLIC "- //W3C //DTD XHTML 1.0 Strict //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- strict.dtd "> < html xmlns = "http://www.w3.org/1999/xhtml" > < head > < meta http-equiv = "Content-Type" content = "text /html; charset = UTF-8" /> < title > ExternalInterface Test 1 < /title > < /head > < body > < div id = "testArea" > < form name = "MyForm" > < for = "output" > label; Tekst fra Flash < /label > < input type = "text" id = "output" name = "output" value = "" /> < /skjema > < /div > < /body > < /html >
Trinn 3: SWF Referencing Funksjon

For enkelt å referere til SWF i vår HTML, vi kommer til å lage en Javascript-funksjonen slik at vi kan referere til SWF i koden vår. For å oppnå dette, legger dette skriptet mellom "hodet" tags
. ≪ script type = "text /javascript" > funksjon Flashmovie (movieName) {if (window.document [movieName]) {return window.document [movieName]; } Else {return document.getElementById (movieName); }} ≪ /script >

Denne funksjonen vil returnere SWF som er gått som en parameter av Flashmovie () -funksjonen. For eksempel "Flashmovie ('testMovie');" ville returnere swf med en id av "testMovie '

Trinn 4:. Lag funksjon for å hente verdier fra Action

Nå skal vi lage en Javascript-funksjon som aksepterer en verdi fra Actionscript. .. Plassere denne inne i vårt allerede gjort skript
tags
funksjons sendToJS (verdi) {document.forms ["MyForm"] output.value = verdi; }

Dette vil ta den verdien vi får fra Action og legg den i vår tekstfeltet med en id av "output"

Trinn 5:. Åpne opp Flash

La oss åpne opp Flash og begynne å jobbe på Actionscript. Opprett en ny Actionscript 3.0 File og opprette et nytt dokument klasse som heter "EIFace1"

Trinn 6:. Oppsett Dokument Class

Jeg skal bruke FDT å skrive EIFace.as, men du er velkommen til å bruke noen Actionscript Editor du føler deg komfortabel med. Vi vil starte med å lage en standard Document Class Shell
pakke {import flash.display.Sprite.; /** *author KreativeKING * /public class EIFace1 strekker Sprite {offentlig funksjon EIFace1 () {}}}
Trinn 7: Opprette Vår Textfield

Opprett tekstfeltet vi skal bruke til å sende vår verdier
field1 = new Textfield (.); field1.type = TextFieldType.INPUT; field1.width = 300; field1.height = 20; field1.border = true; field1.borderColor = 0x565656; field1.background = true; field1.backgroundColor = 0x121212; field1.defaultTextFormat = new tekstformat ("Arial", 14, 0xEFEFEF); field1.x = stage.stageWidth * 0,5 - field1.width * 0,5; field1.y = stage.stageHeight * .5- field1.height * 0,5; stage.addChild (field1);
Trinn 8: Opprett en Send-knapp

Lag en knapp til å klikke. Jeg er ikke fan av å bruke komponenter, så jeg vil være å bygge en knapp fra grunnen av ved hjelp av Flash IDE. Du er velkommen til å bare lage en boks eller bruke Simple komponenten; Jeg skal la deg bruke de kreative juice. Hvis du trenger ingen ytterligere hjelp med å bygge en knapp, kan du hoppe til trinn 11.

Start med å lage et rektangel med rektangel Primitive Tool. Jeg vil ikke gi spesifikke verdier, bare føler det ut til asetting du liker

Trinn 9:.. Fortsett Button Creation

Konverter rektangelet inn en MovieClip

Opprett et nytt lag inne i MovieClip og sted "Send til JS" tekst

Trinn 10:.. Export For Action

Gå inn i biblioteket ditt, høyreklikker du på knappen og eksport for Action

Trinn 11: Kode i knappe

Vi kommer til å kode vår knappen inn i vårt dokument Class
Button1 = new SendButton ();. button1.x = stage.stageWidth * 0,5 - button1.width * 0,5; button1.y = field1.y + 30; stage.addChild (Button1);
Trinn 12:.! Hvor er vi nå

Dette er hvordan HTML-siden skal nå vises
<! DOCTYPE html PUBLIC "- //W3C //DTD XHTML 1.0 Strict //EN "" http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> < html xmlns = "http://www.w3.org/1999/xhtml" > < head > < meta http-equiv = "Content-Type" content = "text /html; charset = UTF-8" /> < title > ExternalInterface Test 1 < /title > < script type = "text /javascript" > funksjon Flashmovie (movieName) {if (window.document [movieName]) {return window.document [movieName]; } Else {return document.getElementById (movieName); .}} Funksjons fromAS (verdi) {document.forms ["MyForm"] output.value = verdi; } ≪ /script > < /head > < body > < div id = "testArea" > < form name = "MyForm" > < for = "output" > label; Tekst fra Flash < /label > < input type = "text" id = "output" name = "output" value = "" /> < /skjema > < /div > < /body > < /html >

The Document klasse skal se slik ut
pakke {import flash.display.MovieClip.; import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldType; import flash.text.TextFormat; /** *author KreativeKING * /public class EIFace1 strekker Sprite {private Var field1: Textfield; private Var Button1: MovieClip; offentlig funksjon EIFace1 () {field1 = new Textfield (); field1.type = TextFieldType.INPUT; field1.width = 300; field1.height = 20; field1.border = true; field1.borderColor = 0x565656; field1.background = true; field1.backgroundColor = 0x121212; field1.defaultTextFormat = new tekstformat ("Arial", 14, 0xEFEFEF); field1.x = stage.stageWidth * 0,5 - field1.width * 0,5; field1.y = stage.stageHeight * .5- field1.height * 0,5; stage.addChild (field1); Button1 = new SendButton (); button1.x = stage.stageWidth * 0,5 - button1.width * 0,5; button1.y = field1.y + 30; stage.addChild (Button1); }}}
Trinn 13: Lag Action til Javascript-funksjonen

Vi trenger nå å skape den funksjonen som sender data fra Flash til Javascript. Dette vil være en enkel funksjon som sender
en streng
button1.addEventListener (MouseEvent.CLICK, sendToJS.); private funksjons sendToJS (e: MouseEvent): void {if (ExternalInterface.available) {ExternalInterface.call ("fromAS", field1.text); }}

Vi først legge til en hendelse lytteren til vår knappen inne i vårt dokument Classes konstruktør. Da skaper vi vår lytteren. ExternalInterface.available
eiendoms sjekker for å se om nettleseren vår er i stand til å bruke ExternalInterface Class. Dette er ikke nødvendig å bruke som vi kjenner vår nettleser kan støtte det, men det er god praksis for å utvikle for web og vi er aldri sikker på om kundens nettleser skal becompatible.

ExternalInterface.call ()
funksjon er det vi bruker å ringe vår Javascript-funksjonen. Den første parameteren er navnet på Javascript-funksjonen vi ønsker å ringe. Det er navnet på vår funksjon i Javascript som en streng. Den andre parameteren er verdien vi ønsker å passere til Javascript-funksjonen. I dette tilfellet, vi passerer verdien av vår tekstfeltet

Merk:. Du kan sende så mange parametere som du vil, men den første parameteren må være navnet på Javascript-funksjonen
<. h2> Trinn 14: Testing Tid

Før vi kan teste, må vi først til å legge ned vår SWF inn i HTML. Jeg må understreke at det er best å bruke SWFObject og ikke standardmetode som Flash bruker å legge ned SWF-filer. La oss publisere vårt SWF, oppsett SWFObject og legge vår fil

Her er SWFObject Embed koden som går inn i hodet av HTML-filen.
≪ script type = "text /javascript" src = "http : //ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js "> < /script > < script type = "text /javascript" > Var FlashVars = {}; Var params = {}; params.allowscriptaccess = "alltid"; params.allownetworking = "alt"; Var attributter = {}; attributes.id = "EIFace"; swfobject.embedSWF ("EIFace.swf", "flashDiv", "350", "200", "9.0.0", falske, FlashVars, params, attributter); < /script >

Det er også viktig at du gir SWF en id. Dette er viktig med hjelp av ExternalInterface og for oss å målrette den ved hjelp av Javascript-funksjonen vi opprettet tidligere. La oss lage vår div som skal huse SWF-fil
. ≪ div id = "flashDiv" > < p > Dette vil bli erstattet med en SWF. Hvis ikke du trenger å oppdatere Flash Player. ≪ /p > < /div >

Her er dokument klasse og HTML-filen opp til dette punktet:
pakke {import flash.external.ExternalInterface; import flash.events.MouseEvent; import flash.display.MovieClip; import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldType; import flash.text.TextFormat; /** *author KreativeKING * /public class EIFace1 strekker Sprite {private Var field1: Textfield; private Var Button1: MovieClip; offentlig funksjon EIFace1 () {field1 = new Textfield (); field1.type = TextFieldType.INPUT; field1.width = 300; field1.height = 20; field1.border = true; field1.borderColor = 0x565656; field1.background = true; field1.backgroundColor = 0x121212; field1.defaultTextFormat = new tekstformat ("Arial", 14, 0xEFEFEF); field1.x = stage.stageWidth * 0,5 - field1.width * 0,5; field1.y = stage.stageHeight * .5- field1.height * 0,5; stage.addChild (field1); Button1 = new SendButton (); button1.x = stage.stageWidth * 0,5 - button1.width * 0,5; button1.y = field1.y + 30; stage.addChild (Button1); button1.addEventListener (MouseEvent.CLICK, sendToJS); } Private funksjon sendToJS (e: MouseEvent): void {if (ExternalInterface.available) {ExternalInterface.call ("fromAS", field1.text); }}}} ≪! DOCTYPE html PUBLIC "- //W3C //DTD XHTML 1.0 Strict //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">!; < html xmlns = "http://www.w3.org/1999/xhtml" > < head > < meta http-equiv = "Content-Type" content = "text /html; charset = UTF-8" /> < title > ExternalInterface Test 1 < /title > < script type = "text /javascript" src = "http://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js" > < /script > < script type = "text /javascript" > Var FlashVars = {}; Var params = {}; params.allowscriptaccess = "alltid"; params.allownetworking = "alt"; Var attributter = {}; attributes.id = "EIFace"; swfobject.embedSWF ("EIFace.swf", "flashDiv", "350", "200", "9.0.0", falske, FlashVars, params, attributter); < /script > < script type = "text /javascript" > funksjon Flashmovie (movieName) {if (window.document [movieName]) {return window.document [movieName]; } Else {return document.getElementById (movieName); .}} Funksjons fromAS (verdi) {document.forms ["MyForm"] output.value = verdi; } ≪ /script > < /head > < body > < div id = "flashDiv" > < p > Dette vil bli erstattet med en SWF. Hvis ikke du trenger å oppdatere Flash Player. ≪ /p > < /div > < div id = "testArea" > < form name = "MyForm" > < for = "output" > label; Tekst fra Flash < /label > < input type = "text" id = "output" name = "output" value = "" /> < /skjema > < /div > < /body > < /html >

Nå åpner opp HTML wrapper og teste det ut. Du vil se at verdien av tekstfeltet i flash blir verdien på tekstfeltet i vår HTML. På et øyeblikk, koden bak dette er ganske enkel og rett frem. La oss nå prøve å sende litt informasjon fra Javascript Action

Trinn 15:.. Gjør Andre Fields

Vi kommer til å lage flere felt for å sende informasjon fra Javascript Action
< for = "input" > label; Send tekst til Flash < /label > < input type = "text" id = "input" name = "input" value = "" /> < input type = "button" value = "SendToFlash" onclick = "sendToFlash (myForm.input.value);" /> field2 = new Textfield (); field2.type = TextFieldType.DYNAMIC; field2.width = 300; field2.height = 20; field2.border = true; field2.borderColor = 0x565656; field2.background = true; field2.backgroundColor = 0xEFEFEF; field2.defaultTextFormat = new tekstformat ("Arial", 14, 0x121212); field2.x = stage.stageWidth * 0,5 - field2.width * 0,5; field2.y = field1.y - 50; stage.addChild (field2);
Trinn 16: Lag The Javascript Action Function

Vi må lage en funksjon som sender verdien fra innsiden vår HTML til Flash. Dette ligner på den funksjonen vi opprettet for å sende verdier fra Action til Javascript
funksjon sendToFlash (verdi) {Flashmovie ("EIFace") sendToFlash (verdi)..; }

Vi bruker funksjonen vi opprettet tidligere for å referere til den innebygde SWF. Nå må vi gå inn i vårt dokument klasse og sette opp Flash for å motta verdier fra Javascript og opprette en ny funksjon som Javascript skal ringe

Trinn 17:. Legge tilbakering

For å registrere Javascript-funksjoner, vi må legge til callbacks slik at Flash vet hva vi prøver å sende når vi kaller en Actionscript-funksjonen. La oss endelig begynne å ringe noen Action
privat funksjons addCallbacks (): void {if (ExternalInterface.available) {ExternalInterface.addCallback ("sendToFlash", fromJS);. }}

ExternalInterface.addCallback ()
funksjonen registrerer en funksjon i Action å bli oppringt av Javascript. Den første parameteren er funksjonen navn som Javascript vil vite funksjonen. . Den andre parameteren er den faktiske funksjon

Enkelt sagt, det betyr i vår Javascript, ville vi kalle sendToFlash () og som ville påberope seg fromJS () -funksjonen i Action

Trinn 18.: Opprette fromJS ()

Nå skal vi lage fromJS () -funksjonen. Dette er en veldig enkel funksjon som vil tildele verdien gått til det i tekstfeltet
privat funksjons fromJS (verdi: String):. Void {field2.text = verdi; }

Tid for en annen test og se hva vi kommer opp med. Her er hva dokument klasse og HTML se ut nå:
pakke {import flash.external.ExternalInterface; import flash.events.MouseEvent; import flash.display.MovieClip; import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldType; import flash.text.TextFormat; /** *author KreativeKING * /public class EIFace1 strekker Sprite {private Var field1: Textfield; private Var Button1: MovieClip; private Var field2: Textfield; offentlig funksjon EIFace1 () {field1 = new Textfield (); field1.type = TextFieldType.INPUT; field1.width = 300; field1.height = 20; field1.border = true; field1.borderColor = 0x565656; field1.background = true; field1.backgroundColor = 0x121212; field1.defaultTextFormat = new tekstformat ("Arial", 14, 0xEFEFEF); field1.x = stage.stageWidth * 0,5 - field1.width * 0,5; field1.y = stage.stageHeight * .5- field1.height * 0,5; stage.addChild (field1); field2 = new Textfield (); field2.type = TextFieldType.DYNAMIC; field2.width = 300; field2.height = 20; field2.border = true; field2.borderColor = 0x565656; field2.background = true; field2.backgroundColor = 0xEFEFEF; field2.defaultTextFormat = new tekstformat ("Arial", 14, 0x121212); field2.x = stage.stageWidth * 0,5 - field2.width * 0,5; field2.y = field1.y - 50; stage.addChild (field2); Button1 = new SendButton (); button1.x = stage.stageWidth * 0,5 - button1.width * 0,5; button1.y = field1.y + 30; stage.addChild (Button1); button1.addEventListener (MouseEvent.CLICK, sendToJS); addCallbacks (); } Private funksjon addCallbacks (): void {if (ExternalInterface.available) {ExternalInterface.addCallback ("sendToFlash", fromJS); }} Private funksjons fromJS (verdi: String): void {field2.text = verdi; } Private funksjon sendToJS (e: MouseEvent): void {if (ExternalInterface.available) {ExternalInterface.call ("fromAS", field1.text); }}}} ≪! DOCTYPE html PUBLIC "- //W3C //DTD XHTML 1.0 Strict //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">!; < html xmlns = "http://www.w3.org/1999/xhtml" > < head > < meta http-equiv = "Content-Type" content = "text /html; charset = UTF-8" /> < title > ExternalInterface Test 1 < /title > < script type = "text /javascript" src = "http://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js" > < /script > < script type = "text /javascript" > Var FlashVars = {}; Var params = {}; params.allowscriptaccess = "alltid"; params.allownetworking = "alt"; Var attributter = {}; attributes.id = "EIFace"; swfobject.embedSWF ("EIFace.swf", "flashDiv", "350", "200", "9.0.0", falske, FlashVars, params, attributter); < /script > < script type = "text /javascript" > funksjon Flashmovie (movieName) {if (window.document [movieName]) {return window.document [movieName]; } Else {return document.getElementById (movieName); .}} Funksjons fromAS (verdi) {document.forms ["MyForm"] output.value = verdi; } Funksjon sendToFlash (verdi) {Flashmovie ("EIFace") sendToFlash (verdi).; } ≪ /script > < /head > < body > < div id = "flashDiv" > < p > Dette vil bli erstattet med en SWF. Hvis ikke du trenger å oppdatere Flash Player. ≪ /p > < /div > < div id = "testArea" > < form name = "MyForm" > < for = "input" > label; Send tekst til Flash < /label > < input type = "text" id = "input" name = "input" value = "" /> < input type = "button" value = "SendToFlash" onclick = "sendToFlash (myForm.input.value);" /> < br /> < br /> < for = "output" > label; Tekst fra Flash < /label > < input type = "text" id = "output" name = "output" value = "" /> < /skjema > < /div > < /body > < /html >
Trinn 19: Resultater

Som du kan se, plassere tekst i vårt nyeste feltet og treffer send sender verdien inn i Flash tekstfeltet. Bruke ExternalInterface klassen er svært enkel og kan ofte komme godt med når du oppretter API-er og applikasjoner som kan manipuleres utsiden av Flash Movie. For eksempel kan dette bli implementert i Video Player API-er for å skape og styring av video med Javascript

Trinn 20:.? Hvem bruker Javascript Classic Anymore

For de fleste av folk der ute nå, ingen er virkelig bruker klassisk Javascript; jQuery er bølgen av fremtiden. Her er et eksempel på bruk av jQuery i stedet for klassisk Javascript
. ≪ script type = "text /javascript" > $ (Function () {$ ('# sendToFlash'). Klikk (function () {if ($ ('# EIFace') [0]) {$ ('# EIFace') [0] .sendToFlash ($ (' #input '.) val ());} else {$ (' # EIFace ') sendToFlash ($ (.' # inngang ') val ());.}});}); funksjons fromAS (verdi) {$ ('# output') val (verdi).; } ≪ /script >

Her er den nye og oppdaterte HTML for bruk med jQuery:
<! DOCTYPE html PUBLIC "- //W3C //DTD XHTML 1.0 Strict //EN" "http: //www! .w3.org /TR /XHTML1 /DTD /XHTML1-strict.dtd "> < html xmlns = "http://www.w3.org/1999/xhtml" > < head > < meta http-equiv = "Content-Type" content = "text /html; charset = UTF-8" /> < title > ExternalInterface Test 1 < /title > < script type = "text /javascript" src = "http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" > < /script > < script type = "text /javascript" src = "http://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js" > < /script > < script type = "text /javascript" > Var FlashVars = {}; Var params = {}; params.allowscriptaccess = "alltid"; params.allownetworking = "alt"; Var attributter = {}; attributes.id = "EIFace"; swfobject.embedSWF ("EIFace.swf", "flashDiv", "350", "200", "9.0.0", falske, FlashVars, params, attributter); < /script > < script type = "text /javascript" > $ (Function () {$ ('# sendToFlash'). Klikk (function () {if ($ ('# EIFace') [0]) {$ ('# EIFace') [0] .sendToFlash ($ (' #input '.) val ());} else {$ (' # EIFace ') sendToFlash ($ (.' # inngang ') val ());.}});}); funksjons fromAS (verdi) {$ ('# output') val (verdi).; } ≪ /script > < /head > < body > < div id = "flashDiv" > < p > Dette vil bli erstattet med en SWF. Hvis ikke du trenger å oppdatere Flash Player. ≪ /p > < /div > < div id = "testArea" > < form name = "MyForm" > < for = "input" > label; Send tekst til Flash < /label > < input type = "text" id = "input" name = "input" value = "" /> < input type = "button" id = "sendToFlash" value = "SendToFlash" /> < br /> < br /> < for = "output" > label; Tekst fra Flash < /label > < input type = "text" id = "output" name = "output" value = "" /> < /skjema > < /div > < /body > < /html >
Konklusjon

Forhåpentligvis har du nå en bedre forståelse om hvordan du bruker ExternalInterface Class. Hvis du har spørsmål eller ideer om hva annet du ønsker å lære, bare legge igjen en kommentar eller tweet meg, og jeg skal se hva jeg kan gjøre. Jeg håper du har lært begrepene og begynner å bruke dem i dine egne prosjekter. Takk for lesing!

kreativeKING Anmeldelser