读书人

AS3跟JS互相调用的小技巧 【一】

发布时间: 2012-09-02 21:00:34 作者: rapoo

AS3和JS互相调用的小技巧 【一】
我对chm帮助手册小解:
选择“文件”>“新建”>“ActionScript 项目”菜单选项。
对于“项目名称”,提供主类的名称(例如:ExternalInterface)。
Flex Builder 将基于 ActionScript 项目模板创建一个 ActionScript 文件。擦除该文件中的所有默认模板内容。
将整个示例(包括包和 import 语句)粘贴到该 ActionScript 文件中。

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);            }        }    }}

使用“运行”或“调试”命令测试示例。我们会在项目ExternalInterfaceExample/bin-debug/目录下找到相应的 ExternalInterfaceExample.swf.


为了测试前面的 ActionScript 代码,我们写一个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>

将“ExternalInterfaceExample.swf”,和HTML页面放在同一目录下,运行页面,进行测试

小注:
这是HTML页面加载flash:
<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>

这是AS3调用JS:
ExternalInterface.call("sendToJavaScript", input.text);

读书人网 >JavaScript

热点推荐