ActionScript și Javascript. Ambele limbi sunt mari pe cont propriu, dar v-ați întrebat vreodată ce ați putea face dacă ar putea vorbi unul cu celălalt? Ei bine, ai noroc! Aici intră clasa ExternalInterface în imagine. Urmați-mă pe măsură ce vă învăț de bază.
Fotografie de Dave Spellman.
În prezent, clasa ExternalInterface este disponibilă în următoarele browsere:
Clasa ExternalInterface vă permite:
Vom sari direct la asta si vom incepe cu un exemplu foarte bun. Mai intai trebuie sa cream pagina noastra HTML, incat sa incarci editorul HTML preferat si sa incepem. Creați un formular în interiorul HTML-ului.
Exercițiul de interfață externă 1
Pentru a trimite cu ușurință SWF în HTML, vom crea o funcție Javascript, astfel încât să putem face referire la SWF în codul nostru. Pentru a realiza acest lucru, plasați acest script între etichetele "cap".
Această funcție va returna SWF care este trecut ca parametru al funcției flashMovie (). De exemplu, "flashMovie (" testMovie ");" ar reveni la swf cu un id de "testMovie".
Acum vom crea o funcție Javascript care acceptă o valoare din ActionScript. Plasați acest lucru în interiorul scenariului deja făcut
Etichete.
funcția sendToJS (valoare) document.forms ["myForm"] output.value = value;
Aceasta va lua oricare valoare obținută de la ActionScript și o vom plasa în câmpul de text cu un id de "ieșire".
Să deschidem Flash și să începem să lucrăm la ActionScript. Creați un nou fișier ActionScript 3.0 și creați o nouă clasă de documente numită "EIFace1".
Voi folosi FDT pentru a scrie EIFace.as, dar sunteți binevenit să utilizați orice Editor ActionScript pe care vă simțiți confortabil. Vom începe prin a crea o clasă standard pentru documente.
pachet import flash.display.Sprite; / ** * @ autorul creativității * / clasa publică EIFace1 extinde Sprite funcția publică EIFace1 ()
Creați câmpul de text pe care îl vom folosi pentru a trimite valorile noastre.
field1 = TextField nou (); field1.type = TextFieldType.INPUT; field1.width = 300; field1.height = 20; field1.border = true; field1.borderColor = 0x565656; field1.background = true; field1.backgroundColor = 0x121212; field1.defaultTextFormat = TextFormat nou ("Arial", 14, 0xEFEFEF); field1.x = stage.stageWidth * .5 - field1.width * .5; field1.y = stage.stageHeight * .5- field1.height * .5; stage.addChild (field1);
Creați un buton pentru a face clic. Nu sunt un fan al utilizării componentelor, așa că voi construi un buton de la zero folosind Flash IDE. Puteți crea doar o cutie sau utilizați componenta SimpleButton; Vă las să folosiți sucurile creative. Dacă nu mai aveți nevoie de ajutor pentru construirea unui buton, puteți trece la pasul 11.
Începeți prin a crea un dreptunghi cu instrumentul Primitiv Rectangular. Nu voi oferi valori specifice, doar simțiți-vă că vă plac.
Conversia dreptunghiului într-un filmClip.
Creați un nou strat în interiorul filmului și plasați textul "Trimiteți la JS".
Du-te în bibliotecă, faceți clic dreapta pe buton și Export pentru ActionScript.
Vom codifica butonul nostru în clasa noastră de documente.
butonul1 = nou TrimiteButton (); buton1.x = stage.stageWidth * .5 - buton1.width * .5; butonul1.y = field1.y + 30; stage.addChild (button1);
Acesta este modul în care ar trebui să apară acum pagina HTML.
Exercițiul de interfață externă 1
Clasa de documente ar trebui să arate așa.
pachet import flash.display.MovieClip; import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldType; import flash.text.TextFormat; / ** * @ autorutul creativității * / clasa publică EIFace1 extinde Sprite private var field1: TextField; privat buton var1: MovieClip; funcția publică 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 = TextFormat nou ("Arial", 14, 0xEFEFEF); field1.x = stage.stageWidth * .5 - field1.width * .5; field1.y = stage.stageHeight * .5- field1.height * .5; stage.addChild (field1); butonul1 = nou TrimiteButton (); buton1.x = stage.stageWidth * .5 - buton1.width * .5; butonul1.y = field1.y + 30; stage.addChild (button1);
Acum trebuie să creăm funcția care trimite datele din Flash în Javascript. Aceasta va fi o funcție simplă pe care o trimite
o sfoară.
butonul1.addEventListener (MouseEvent.CLICK, sendToJS); funcția privată sendToJS (e: MouseEvent): void if (ExternalInterface.available) ExternalInterface.call ("fromAS", field1.text);
Adăugăm mai întâi un asistent de participare la butonul nostru, în interiorul constructorului nostru de clase de documente. Apoi ne creăm pe ascultător. ExternalInterface.available verificări de proprietate pentru a vedea dacă browserul nostru este capabil să utilizeze clasa ExternalInterface. Nu este necesar să utilizăm așa cum știm că browserul nostru o poate sprijini, dar este o practică bună pentru dezvoltarea pentru web și nu suntem siguri dacă browserul client va fi compatibil.
ExternalInterface.call () este ceea ce folosim pentru a numi funcția noastră Javascript. Primul parametru este numele funcției Javascript pe care dorim să o apelam. Este numele funcției noastre în Javascript ca un șir. Al doilea parametru este valoarea pe care dorim să trecem la funcția Javascript. În acest caz, depășim valoarea textului nostru.
Notă: Puteți trece cât mai mulți parametri doriți, dar primul parametru trebuie să fie numele funcției Javascript.
Înainte de a putea testa, trebuie mai întâi să încorporăm SWF în HTML. Trebuie să subliniez că este mai bine să utilizați SWFObject și nu metoda implicită utilizată de Flash pentru a încorpora fișierele SWF. Să publicăm SWF-ul nostru, configurați SWFObject și să încorporăm fișierul nostru.
Iată codul SWFObject Embed, care intră în capul fișierului HTML:
De asemenea, este important să dați SWF-ul un ID. Acest lucru este important cu utilizarea ExternalInterface și pentru noi să-l țintească folosind funcția Javascript pe care am creat-o mai devreme. Să creăm Divul nostru care va găzdui dosarul SWF.
Acest lucru va fi înlocuit cu un SWF. Dacă nu aveți nevoie să vă actualizați Flash Player-ul.
Iată clasa de documente și fișierul HTML până la acest punct:
pachet import flash.external.ExternalInterface; importul flash.events.MouseEvent; import flash.display.MovieClip; import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldType; import flash.text.TextFormat; / ** * @ autorutul creativității * / clasa publică EIFace1 extinde Sprite private var field1: TextField; privat buton var1: MovieClip; funcția publică 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 = TextFormat nou ("Arial", 14, 0xEFEFEF); field1.x = stage.stageWidth * .5 - field1.width * .5; field1.y = stage.stageHeight * .5- field1.height * .5; stage.addChild (field1); butonul1 = nou TrimiteButton (); buton1.x = stage.stageWidth * .5 - buton1.width * .5; butonul1.y = field1.y + 30; stage.addChild (button1); butonul1.addEventListener (MouseEvent.CLICK, sendToJS); funcția privată sendToJS (e: MouseEvent): void if (ExternalInterface.available) ExternalInterface.call ("fromAS", field1.text);
Exercițiul de interfață externă 1 Acest lucru va fi înlocuit cu un SWF. Dacă nu aveți nevoie să vă actualizați Flash Player-ul.
Acum, deschideți ambalajul HTML și testați-l. Veți vedea că valoarea câmpului de text din flash devine valoarea din câmpul de text din codul nostru HTML. Pe scurt, codul din spatele acestui lucru este destul de simplu și direct. Acum, să încercăm să trimitem niște informații de la Javascript la ActionScript.
Vom crea câmpuri suplimentare pentru a trimite informații de la Javascript la ActionScript.
field2 = TextField nou (); field2.type = TextFieldType.DYNAMIC; field2.width = 300; field2.height = 20; field2.border = true; field2.borderColor = 0x565656; field2.background = true; field2.backgroundColor = 0xEFEFEF; field2.defaultTextFormat = TextFormat nou ("Arial", 14, 0x121212); field2.x = stage.stageWidth * .5 - field2.width * .5; field2.y = field1.y - 50; stage.addChild (field2);
Trebuie să creăm o funcție care trimite valoarea din interiorul HTML-ului nostru în Flash. Acesta este similar cu funcția pe care am creat-o pentru a trimite valori de la ActionScript la Javascript.
funcția sendToFlash (valoare) flashMovie ("EIFace") sendToFlash (valoare);
Utilizăm funcția pe care am creat-o mai devreme pentru a face referire la SWF-ul încorporat. Acum trebuie să mergem în clasa noastră de documente și să setăm Flash pentru a primi valori de la Javascript și pentru a crea o nouă funcție pe care Javascript o va apela.
Pentru a înregistra funcțiile Javascript, trebuie să adăugăm callback-uri, astfel încât Flash să știe ce încercăm să trimitem atunci când apelăm o funcție ActionScript. Să începem în sfârșit să sunăm ceva ActionScript.
funcția privată addCallbacks (): void if (ExternalInterface.available) ExternalInterface.addCallback ("sendToFlash", dinJS);
ExternalInterface.addCallback () funcția înregistrează o funcție în ActionScript care va fi apelată de Javascript. Primul parametru este numele funcției prin care Javascript va cunoaște funcția. Al doilea parametru este funcția reală.
Pur și simplu pus, asta înseamnă în Javascriptul nostru, am numi sendToFlash () și care ar invoca funcția fromJS () în ActionScript.
Acum vom crea funcția fromJS (). Aceasta este o funcție foarte simplă care va atribui valoarea câmpului textului.
funcția privată de la JS (valoare: String): void field2.text = value;
Timp pentru un alt test și pentru a vedea ce vom veni. Iată ce arată acum clasa de documente și codul HTML:
pachet import flash.external.ExternalInterface; importul flash.events.MouseEvent; import flash.display.MovieClip; import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldType; import flash.text.TextFormat; / ** * @ autorutul creativității * / clasa publică EIFace1 extinde Sprite private var field1: TextField; privat buton var1: MovieClip; privat câmp var2: TextField; funcția publică 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 = TextFormat nou ("Arial", 14, 0xEFEFEF); field1.x = stage.stageWidth * .5 - field1.width * .5; field1.y = stage.stageHeight * .5- field1.height * .5; stage.addChild (field1); field2 = TextField nou (); field2.type = TextFieldType.DYNAMIC; field2.width = 300; field2.height = 20; field2.border = true; field2.borderColor = 0x565656; field2.background = true; field2.backgroundColor = 0xEFEFEF; field2.defaultTextFormat = TextFormat nou ("Arial", 14, 0x121212); field2.x = stage.stageWidth * .5 - field2.width * .5; field2.y = field1.y - 50; stage.addChild (field2); butonul1 = nou TrimiteButton (); buton1.x = stage.stageWidth * .5 - buton1.width * .5; butonul1.y = field1.y + 30; stage.addChild (button1); butonul1.addEventListener (MouseEvent.CLICK, sendToJS); addCallbacks (); funcția privată addCallbacks (): void if (ExternalInterface.available) ExternalInterface.addCallback ("sendToFlash", dinJS); funcția privată dinJS (valoare: String): void field2.text = value; funcția privată sendToJS (e: MouseEvent): void if (ExternalInterface.available) ExternalInterface.call ("fromAS", field1.text);
Exercițiul de interfață externă 1 Acest lucru va fi înlocuit cu un SWF. Dacă nu aveți nevoie să vă actualizați Flash Player-ul.
După cum puteți vedea, plasarea textului în cel mai nou câmp și apăsarea mesajului trimite trimite valoarea în câmpul pentru textul Flash. Utilizarea clasei ExternalInterface este foarte simplă și poate fi adesea utilă atunci când creați aplicații API și aplicații care pot fi manipulate în afara filmului Flash. De exemplu, acest lucru poate fi implementat în API-urile Video Player pentru crearea și controlul videoclipului cu Javascript.
Pentru majoritatea oamenilor de acolo, nimeni nu folosește cu adevărat Javascript clasic; jQuery este valul viitorului. Iată un exemplu de utilizare a jQuery în loc de Javascript clasic.
Iată noul HTML actualizat pentru jQuery:
Exercițiul de interfață externă 1 Acest lucru va fi înlocuit cu un SWF. Dacă nu aveți nevoie să vă actualizați Flash Player-ul.
Sperăm că acum aveți o mai bună înțelegere cu privire la utilizarea ExternalInterface Class. Dacă aveți întrebări sau idei despre ce altceva doriți să învățați, lăsați-mi un comentariu sau tweet-mă și voi vedea ce pot face. Sper că ați învățat conceptele și să începeți să le utilizați în propriile proiecte. Vă mulțumim pentru lectură!
kreativeKING