AS 与 js 交互示例
ActionScript/Flash代码
- package {
- import flash.display.Sprite;
- import flash.events.*;
- import flash.external.ExternalInterface;
- import flash.text.TextField;
- import flash.utils.Timer;
- import flash.text.TextFieldType;
- import flash.text.TextFieldAutoSize;
- public class ExternalInterfaceExample extends Sprite {
- private var input:TextField;
- private var output:TextField;
- private var sendBtn:Sprite;
- public function ExternalInterfaceExample() {
- input = new TextField();
- input.type = TextFieldType.INPUT;
- input.background = true;
- input.border = true;
- input.width = 350;
- input.height = 18;
- addChild(input);
- sendBtn = new Sprite();
- sendBtn.mouseEnabled = true;
- sendBtn.x = input.width + 10;
- sendBtn.graphics.beginFill(0xCCCCCC);
- sendBtn.graphics.drawRoundRect(0, 0, 80, 18, 10, 10);
- sendBtn.graphics.endFill();
- sendBtn.addEventListener(MouseEvent.CLICK, clickHandler);
- addChild(sendBtn);
- output = new TextField();
- output.y = 25;
- output.width = 450;
- output.height = 325;
- output.multiline = true;
- output.wordWrap = true;
- output.border = true;
- output.text = "Initializing...\n";
- addChild(output);
- if (ExternalInterface.available) {
- try {
- output.appendText("Adding callback...\n");
- ExternalInterface.addCallback("sendToActionScript", receivedFromJavaScript);
- if (checkJavaScriptReady()) {
- output.appendText("JavaScript is ready.\n");
- } else {
- output.appendText("JavaScript is not ready, creating timer.\n");
- var readyTimer:Timer = new Timer(100, 0);
- readyTimer.addEventListener(TimerEvent.TIMER, timerHandler);
- readyTimer.start();
- }
- } catch (error:SecurityError) {
- output.appendText("A SecurityError occurred: " + error.message + "\n");
- } catch (error:Error) {
- output.appendText("An Error occurred: " + error.message + "\n");
- }
- } else {
- output.appendText("External interface is not available for this container.");
- }
- }
- private function receivedFromJavaScript(value:String):void {
- output.appendText("JavaScript says: " + value + "\n");
- }
- private function checkJavaScriptReady():Boolean {
- var isReady:Boolean = ExternalInterface.call("isReady");
- return isReady;
- }
- private function timerHandler(event:TimerEvent):void {
- output.appendText("Checking JavaScript status...\n");
- var isReady:Boolean = checkJavaScriptReady();
- if (isReady) {
- output.appendText("JavaScript is ready.\n");
- Timer(event.target).stop();
- }
- }
- private function clickHandler(event:MouseEvent):void {
- if (ExternalInterface.available) {
- ExternalInterface.call("sendToJavaScript", input.text);
- }
- }
- }
- }
JS/HTML代码
- <!-- saved from url=(0014)about:internet -->
- <html lang="en">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>ExternalInterfaceExample</title>
- <script language="JavaScript">
- var jsReady = false;
- function isReady() {
- return jsReady;
- }
- function pageInit() {
- jsReady = true;
- document.forms["form1"].output.value += "\n" + "JavaScript is ready.\n";
- }
- function thisMovie(movieName) {
- if (navigator.appName.indexOf("Microsoft") != -1) {
- return window[movieName];
- } else {
- return document[movieName];
- }
- }
- function sendToActionScript(value) {
- thisMovie("ExternalInterfaceExample").sendToActionScript(value);
- }
- function sendToJavaScript(value) {
- document.forms["form1"].output.value += "ActionScript says: " + value + "\n";
- }
- </script>
- </head>
- <body onload="pageInit();">
- <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
- id="ExternalInterfaceExample" width="500" height="375"
- codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
- <param name="movie" value="ExternalInterfaceExample.swf" />
- <param name="quality" value="high" />
- <param name="bgcolor" value="#869ca7" />
- <param name="allowScriptAccess" value="sameDomain" />
- <embed src="ExternalInterfaceExample.swf" quality="high" bgcolor="#869ca7"
- width="500" height="375" name="ExternalInterfaceExample" align="middle"
- play="true" loop="false" quality="high" allowScriptAccess="sameDomain"
- type="application/x-shockwave-flash"
- pluginspage="http://www.macromedia.com/go/getflashplayer">
- </embed>
- </object>
- <form name="form1" onsubmit="return false;">
- <input type="text" name="input" value="" />
- <input type="button" value="Send" onclick="sendToActionScript(this.form.input.value);" /><br />
- <textarea cols="60" rows="20" name="output" readonly="true">Initializing...</textarea>
- </form>
- </body>
- </html>
说明:
在Flash的输入框中输入信息,点击发送,可以在flash页面上显示出来;
在HTML的输入框中输入信息,点击发送,可以在Flash的文本框中显示出来