Tip Cepat: Cara Berkomunikasi Antara Flash dan JavaScript
() translation by (you can also view the original English article)
Di Tip Cepat ini, kita akan melihat cara menggunakan kelas ExternalInterface. Ini memungkinkan kita untuk menulis AS3 yang dapat menjalankan kode JavaScript, dan sebaliknya. Itu berarti Anda dapat menggunakan Flash untuk mengubah bagian-bagian dari halaman web dimana ia berjalan!
Langkah 1: Siapkan Dokumen Flash
Buat dokumen Flash ActionScript 3 baru. Ubah ukuran panggung menjadi 600x300. Dengan alat persegi panjang, gambar persegi panjang yang merupakan ukuran panggung. Beri warna #CCCCCC. Juga, beri stroke hitam 2px.



Langkah 2: Siapkan UI Flash
Berikut tata letaknya yang akan kita kerjakan:



Buka Components Panel (Window > Components) dan, dari folder User Interface, seret komponen ColorPicker ke atas panggung. Berikan nama instance 'cp'.
Selanjutnya buat field teks dinamis yang disebut 'resizeText'; tempatkan dan ukur sesuka Anda (Anda tidak bisa melihat yang ada di gambar saya; itu kosong, dan di kanan atas panggung.)
Sekarang, buat field teks dinamis lainnya. Berikan nama instance 'jsText'. Kemudian buat simbol tombol dan berikan nama instance 'prompt'. Setelah itu, buat tombol lain dan berikan nama instance 'change'.
Akhirnya, buat dua field masukan teks. Tempatkan satu di sebelah tombol 'prompt' Anda, dan beri nama 'promptText'. Ambil field teks kedua, pindahkan di sebelah tombol 'change' dan beri nama 'changeText'.
Juga, tambahkan label apa pun yang Anda inginkan; lihat gambar saya untuk melihat bagaimana saya mengaturnya.
Langkah 3: Siapkan UI HTML
Agar ExternalInterface bekerja, dokumen harus berada di internet. Pertama, buat file teks baru, dan simpan sebagai 'externalInterface.html'. Selanjutnya, buka editor teks dan tambahkan semua kode di bawah ini. Simpan file HTML.
1 |
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
2 |
<head>
|
3 |
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> |
4 |
<title>externalInterface</title> |
5 |
<style type="text/css"> |
6 |
|
7 |
body { |
8 |
font-family:Arial; |
9 |
}
|
10 |
|
11 |
#asSend { |
12 |
padding-top:20px; |
13 |
font-size:12px; |
14 |
}
|
15 |
#htmlWrap { |
16 |
margin-top:10px; |
17 |
width:578px; |
18 |
padding-left:20px; |
19 |
border-width:1px; |
20 |
border-style:solid; |
21 |
}
|
22 |
#sender { |
23 |
margin-top:10px; |
24 |
}
|
25 |
#textChange { |
26 |
font-size:13px; |
27 |
font-weight:bold; |
28 |
padding-top:10px; |
29 |
padding-bottom:20px; |
30 |
}
|
31 |
|
32 |
</style>
|
33 |
</head>
|
34 |
<body>
|
35 |
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="600" height="300" id="externalInterface" align="middle"> |
36 |
<param name="allowScriptAccess" value="sameDomain" /> |
37 |
<param name="allowFullScreen" value="false" /> |
38 |
<param name="movie" value="externalInterface.swf" /> |
39 |
<param name="quality" value="high" /> |
40 |
<param name="bgcolor" value="#ffffff" /> |
41 |
<embed src="externalInterface.swf" quality="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" /> |
42 |
</object>
|
43 |
<div id="htmlWrap"> |
44 |
<div id="asSend"> |
45 |
<label for="textArea">Send to actionscript:</label><br /> |
46 |
<textarea cols="50" rows="4" id="textArea" name="textArea"></textarea> |
47 |
<br /> |
48 |
<button id="sender" name="sender">Send</button> |
49 |
</div>
|
50 |
<div id="textChange">Use Actionscript to change me!</div> |
51 |
</div>
|
52 |
</body>
|
53 |
</html>
|
Area utamanya adalah:
- Bagian <object>, yang menyematkan SWF yang akan Anda buat dari file Flash.
- <div> dan <textarea>, yang memiliki properti id sehingga kita dapat mengaksesnya dari SWF.
HTML Anda akan muncul seperti di bawah ini:



Ketika kode telah diganti, unggah file ke server web Anda, sehingga kita bisa memulai dengan ActionScript.
Langkah 4: Siapkan Kelas Document
Buat kelas dokumen untuk file Flash Anda; sebut saja Main.as. Jika Anda tidak akrab dengan kelas dokumen, baca Tip Cepat ini.
1 |
package
|
2 |
{
|
3 |
import flash.display.MovieClip; |
4 |
public class Main extends MovieClip { |
5 |
public function Main() { |
6 |
|
7 |
}
|
8 |
}
|
9 |
}
|
Langkah 5: Memanggil Fungsi JavaScript dari Flash
Hal pertama yang akan kita lakukan dengan ExternalInterface adalah memanggil fungsi JavaScript yang akan mengubah warna latar belakang halaman web kita. Jadi, lampirkan listener event ke komponen ColorPicker kita. Ketika warnanya berubah, ia akan mengirim nilai hex ke fungsi javascript yang disebut receiveColor():
1 |
package
|
2 |
{
|
3 |
import fl.events.ColorPickerEvent; |
4 |
import flash.display.MovieClip; |
5 |
import flash.external.ExternalInterface; |
6 |
public class Main extends MovieClip { |
7 |
public function Main() { |
8 |
cp.addEventListener(ColorPickerEvent.CHANGE, colorChange); |
9 |
}
|
10 |
|
11 |
public function colorChange(event:ColorPickerEvent):void { |
12 |
ExternalInterface.call("receiveColor", event.target.hexValue); //calls receiveColor(event.target.hexValue) in the javascript |
13 |
}
|
14 |
}
|
15 |
}
|
Sekarang kita harus menulis fungsi receiveColor() ini. Di head dokumen HTML kita, kita memulai javascript dengan mendefinisikan fungsi ini. Ini hanya mengambil nilai yang dikirim kepadanya dari Flash dan mengubah warna latar belakang.
1 |
<script type="text/javascript"> |
2 |
function receiveColor(value) { |
3 |
document.bgColor = "#" + value; |
4 |
}
|
5 |
</script>
|
Letakkan itu tepat setelah di <head> file HTML Anda. Jika semuanya baik-baik saja, ketika Anda menjalankan halaman HTML di browser dan mengubah warna di ColorPicker, itu harus mengubah warna latar belakang halaman web. yang Anda tambahkan di langkah terakhir:
Langkah 6: Memanggil Fungsi ActionScript dari JavaScript
Contoh selanjutnya adalah mengirim data dari JavaScript ke Flash. Dalam dokumen HTML, tempel kode berikut dalam tag <script> yang Anda tambahkan di langkah terakhir:
1 |
window.onload = function() { |
2 |
var sender = document.getElementById("sender"); //getElementById finds an element according to its "id" property |
3 |
sender.onclick = function() { |
4 |
var ta = document.getElementById("textArea"); |
5 |
document['externalInterface'].receiveText(ta.value); |
6 |
ta.value = ""; |
7 |
}; |
8 |
}; |
Inilah yang terjadi: setelah dokumen dimuat, kita mendapatkan tombol 'sender' dan melampirkan listener event ke sana. Ketika tombol 'sender' diklik, itu akan memanggil fungsi receiveText() dalam Flash yang akan kita atur sekarang.
Kembali ke Flash, kita memberi tahu ExternalInterface untuk mendaftarkan fungsi ActionScript sehingga bisa dipanggil dari JavaScript. Kemudian kita mengatur fungsi receiveText():
1 |
package
|
2 |
{
|
3 |
import fl.events.ColorPickerEvent; |
4 |
import flash.display.MovieClip; |
5 |
import flash.external.ExternalInterface; |
6 |
public class Main extends MovieClip { |
7 |
public function Main() { |
8 |
cp.addEventListener(ColorPickerEvent.CHANGE, colorChange); |
9 |
ExternalInterface.addCallback("receiveText", receiveText); //allows JavaScript to access the receiveText() function. |
10 |
}
|
11 |
|
12 |
public function colorChange(event:ColorPickerEvent):void { |
13 |
ExternalInterface.call("receiveColor", event.target.hexValue); |
14 |
}
|
15 |
|
16 |
//this is the new receiveText function
|
17 |
public function receiveText(value:String):void { |
18 |
jsText.text = value; |
19 |
}
|
20 |
}
|
21 |
}
|
(Baris baru adalah 5, 9 dan 16-19.)
Langkah 7: Memanggil Alert, Confirm dan Prompt JavaScript dari ActionScript
Kita juga dapat memanggil peringatan dengan sangat mudah dari ActionScript. Di sini kita hanya memberitahu ExternalInterface untuk memanggil 'prompt'. Kita juga bisa menggunakan ExternalInterface untuk mengirimkan parameter ke fungsi. Di sini kita memberi tahu fungsi 'prompt' untuk menanyakan nama penggunanya. Ketika pengguna kita memasukkan infonya, itu diteruskan kembali ke field teks 'promptText'.
1 |
package
|
2 |
{
|
3 |
import fl.events.ColorPickerEvent; |
4 |
import flash.display.MovieClip; |
5 |
import flash.external.ExternalInterface; |
6 |
public class Main extends MovieClip { |
7 |
public function Main() { |
8 |
cp.addEventListener(ColorPickerEvent.CHANGE, colorChange); |
9 |
ExternalInterface.addCallback("receiveText", receiveText); |
10 |
prompt.addEventListener(MouseEvent.CLICK, promptClick); //makes promptClick() run when prompt button is clicked |
11 |
}
|
12 |
|
13 |
public function colorChange(event:ColorPickerEvent):void { |
14 |
ExternalInterface.call("receiveColor", event.target.hexValue); |
15 |
}
|
16 |
|
17 |
public function receiveText(value:String):void { |
18 |
jsText.text = value; |
19 |
}
|
20 |
|
21 |
//function to be called when prompt button is clicked. Will ask for user's name using a JS prompt.
|
22 |
public function promptClick(event:MouseEvent):void { |
23 |
promptText.text = "You said your name is: " + ExternalInterface.call("prompt", "What is your name?"); |
24 |
}
|
25 |
}
|
26 |
}
|
(Baris baru adalah 10 dan 21-24.)
Langkah 8: Memanggil Fungsi JavaScript Anonim
Hal lain yang bisa kita lakukan adalah menulis fungsi JavaScript kita sendiri sebagai string, kemudian memanggilnya dari ExternalInterface. Di sini kita membuat fungsi JavaScript yang menerima parameter. Kita mengambil parameter itu dan menetapkan nilainya ke atribut innerHTML dari div 'textChange' kita di dokumen HTML. Anda akan melihat bahwa tidak ada fungsi JavaScript eksternal yang dipanggil - semuanya ada dalam ActionScript.
1 |
package
|
2 |
{
|
3 |
import fl.events.ColorPickerEvent; |
4 |
import flash.display.MovieClip; |
5 |
import flash.external.ExternalInterface; |
6 |
public class Main extends MovieClip { |
7 |
public function Main() { |
8 |
cp.addEventListener(ColorPickerEvent.CHANGE, colorChange); |
9 |
ExternalInterface.addCallback("receiveText", receiveText); |
10 |
prompt.addEventListener(MouseEvent.CLICK, promptClick); |
11 |
change.addEventListener(MouseEvent.CLICK, changeClick); //makes changeClick() run when change button is clicked |
12 |
}
|
13 |
|
14 |
public function colorChange(event:ColorPickerEvent):void { |
15 |
ExternalInterface.call("receiveColor", event.target.hexValue); |
16 |
}
|
17 |
|
18 |
public function receiveText(value:String):void { |
19 |
jsText.text = value; |
20 |
}
|
21 |
|
22 |
public function promptClick(event:MouseEvent):void { |
23 |
promptText.text = "You said your name is: " + ExternalInterface.call("prompt", "What is your name?"); |
24 |
}
|
25 |
|
26 |
//changes text inside the HTML to match text field inside Flash
|
27 |
public function changeClick(event:MouseEvent):void { |
28 |
ExternalInterface.call("function(param){ document.getElementById('textChange').innerHTML = param; }", changeText.text); |
29 |
changeText.text = ""; |
30 |
}
|
31 |
}
|
32 |
}
|
(Baris baru adalah 11 dan 26-30.)
Langkah 9: Memanggil Fungsi JavaScript dan ActionScript Anonim
Akhirnya, kita dapat memanggil fungsi anonim di kedua sisi. Dalam fungsi 'anonim', kita mendaftarkan fungsi ActionScript anonim dengan ExternalInterface. Fungsinya mengisi beberapa teks, lalu memulai pengatur waktu. Selanjutnya, kita panggil fungsi JavaScript anonim. Fungsi ini memberitahu jendela, ketika sudah diubah ukurannya, itu harus memanggil kembali fungsi ActionScript anonim kita.
1 |
package
|
2 |
{
|
3 |
import fl.events.ColorPickerEvent; |
4 |
import flash.display.MovieClip; |
5 |
import flash.external.ExternalInterface; |
6 |
public class Main extends MovieClip { |
7 |
public function Main() { |
8 |
cp.addEventListener(ColorPickerEvent.CHANGE, colorChange); |
9 |
ExternalInterface.addCallback("receiveText", receiveText); |
10 |
prompt.addEventListener(MouseEvent.CLICK, promptClick); |
11 |
change.addEventListener(MouseEvent.CLICK, changeClick); |
12 |
|
13 |
//create a new timer with a one second tick, and add an event listener
|
14 |
var timer:Timer = new Timer(1000); |
15 |
timer.addEventListener(TimerEvent.TIMER, onTimer); |
16 |
|
17 |
anonymous(); //set up the anonymous functions |
18 |
}
|
19 |
|
20 |
public function colorChange(event:ColorPickerEvent):void { |
21 |
ExternalInterface.call("receiveColor", event.target.hexValue); |
22 |
}
|
23 |
|
24 |
public function receiveText(value:String):void { |
25 |
jsText.text = value; |
26 |
}
|
27 |
|
28 |
public function promptClick(event:MouseEvent):void { |
29 |
promptText.text = "You said your name is: " + ExternalInterface.call("prompt", "What is your name?"); |
30 |
}
|
31 |
|
32 |
public function changeClick(event:MouseEvent):void { |
33 |
ExternalInterface.call("function(param){ document.getElementById('textChange').innerHTML = param; }", changeText.text); |
34 |
changeText.text = ""; |
35 |
}
|
36 |
|
37 |
//clear the text after one second has passed
|
38 |
public function onTimer(event:TimerEvent):void { |
39 |
resizeText.text = ""; |
40 |
timer.stop(); |
41 |
}
|
42 |
|
43 |
public function anonymous():void { |
44 |
//see how we're defining a function inside another function?
|
45 |
ExternalInterface.addCallback("anon", function(){ |
46 |
resizeText.text = "The window has been resized."; |
47 |
timer.start(); |
48 |
});
|
49 |
|
50 |
//same applies here
|
51 |
ExternalInterface.call("function(){ window.onresize = function(){ document['externalInterface'].anon(); }; }"); |
52 |
}
|
53 |
}
|
54 |
}
|
(Baris baru adalah 13-17 dan 37-52.)
Kesimpulan
ExternalInterface adalah kelas yang sangat kuat dan berguna. Dengannya, Anda dapat menerima nilai dan event, semua di luar SWF. Bersenang-senanglah dengan itu dan terima kasih telah membaca!