这里将演示的ActionScript和JavaScript的通信,包括ActionScript调用JavaScript的方法,及JavaScript调用ActionScript的方法.
主要用到的是AS2.0里的ExternInterface类.在Flash里调用javascript的方法时使用ExternalInterface.call(),在javascript里调用actionScript 方法时,必须首先在Flash里使用ExternalInterface.addCallback注册方法.
另外一个关键是要把SWF文件放到网页中才行!
先看下效果图,再分析!
效果演示
在这个例子中,网页和SWF中都有一个输入框,和一个发送按钮,用来把SWF中的信息发送到JavaScript,及从JavaScript发送到SWF
SWF容器
JS容器
对ActionScript说:
代码分析
先看SWF里的ActionScript代码
AS Codeimport flash.external.*; // 注册的方法名字,JavaScript将使用这个名字调用 var methodName:String = "send2AS"; var instance:Object = null; // 实际调用的函数 var method:Function = receiveMsg; // 返回值表示是否注册成功 var wasSuccessful:Boolean = ExternalInterface.addCallback (methodName, instance, method); function receiveMsg (msg:String) { info_txt.text += newline; info_txt.text += "<font color='#0000FF'>JS</font> <font color='#00FFFF'>" + getDateStr () + "</font> 说:" + newline + msg; } // 发送消息 var btnObj:Object = new Object (); btnObj.click = function () { sendMsg (send_txt.text); }; function sendMsg (msg:String) { if (msg != "") { ExternalInterface.call ("send2JS", msg); } } var keyObj:Object = new Object (); keyObj.onKeyDown = function () { if (Key.getCode () == Key.ENTER && send_txt.text != "") { sendMsg (send_txt.text); } }; // 获取时间 function getDateStr ():String { var myDate:Date = new Date (); return myDate.getFullYear () + "-" + (myDate.getMonth () + 1) + "-" + myDate.getDate () + " " + myDate.getHours () + ":" + myDate.getMinutes () + ":" + myDate.getSeconds (); } function init () { info_txt.html = true; if (wasSuccessful) { info_txt.text = "注册回调函数成功!"; } else { info_txt.text = "注册回调函数失败!"; } send_txt.text = ""; send_btn.addEventListener ("click", btnObj); Key.addListener (keyObj); } stop (); init ();
要使用ExternalInterface类,必须首先导入它,这里使用的是
AS Codeimport flash.external.*;
然后使用ExternalInterface.addCallback方法注册了名字为send2AS的方法,这样JavaScript中就可以使用send2AS调用SWF中实际名称为receiveMsg的方法了,该方法有一个参数,接收传递来的信息.我们把接收到消息显示在一个实例名为info_txt的TextArea组件里.
接下来定义的btnObj是为发送按钮添加事件监听用的,当按下发送按钮时就用ExternalInterface.call调用定义在JavaScript里的名称为send2JS的方法,并传递一个参数.keyObj是为了响应回车事件定义的.
getDateStr是获取本地当前时间的.后面的初始化函数init()也很简单.
SWF里的ActionScript代码就这么多,下面我们看JavaScript函数
JavaScript函数
JavaScript Code// 定义在网页里用来和SWF交互的JavaScript函数 function send2JS(msg) { receiveMsg(msg); } function receiveMsg(msg) { document.getElementById('jstxt').innerHTML += "<font color='blue'>AS</font> <font color='#00FFFF'>" + getDateStr() + "</font> 说:<br />" + msg + "<br />"; } // 发送消息 function sendmsg() { document.getElementById('as_js').send2AS(document.getElementById('send_txt').value); } // 获取时间 function getDateStr () { var myDate = new Date (); return myDate.getFullYear () + "-" + (myDate.getMonth () + 1) + "-" + myDate.getDate () + " " + myDate.getHours () + ":" + myDate.getMinutes () + ":" + myDate.getSeconds (); }
另外网页中有一个id为jstxt的div,用来显示SWF发过来的消息结果,有一个id为send_txt的文本框,用来输入消息,还有一个发送按钮.
这里的JS函数跟AS很相似,也是这么几个函数,其中send2JS是供AS调用的,receiveMsg就是显示结果.sendmsg是调用SWF里的ActionScript注册的回调函数send2AS,注意,这里的as_js是SWF的在网页里的id.getDateStr就是取得系统时间的.
还有不明白的可以在本页面点右键查看网页源代码,然后分析.