【www.bbyears.com--Action】
ActionScript调用javaScript
需要引入flash.external.ExternalInterface,这里要用到ExternalInterface类的call方法:
ExternalInterface.call(functionName:String,…arguments):*,fuctionName:
要调用的Javascript函数名,arguments:参数,可选。
调用由 Flash Player 容器公开的函数,传递零个或多个参数。如果所需的函数不可用,则调用返回 null;否则,它返回由该函数提供的值。不允许使用递归;递归调用会生成 null 响应。
如果容器是 HTML 页,则此方法在<script> 元素中调用 JavaScript 函数。
如果该容器是其它某个 ActiveX 容器,则此方法会使用指定的名称广播事件,并且该容器会处理该事件。
如果该容器承载 Netscape 插件,您可以写入对新 NPRuntime 接口的自定义支持或嵌入 HTML 控件以及在 HTML 控件内嵌入 Flash Player。如果嵌入 HTML 控件,就可以通过与本机容器应用程序通迅的 JavaScript 接口与 Flash Player 进行通讯。
JavaScript调用ActionScript
需要引入flash.external.ExternalInterface,这要用到ExternalInterface类的addCallback方法:
ExternalInterface.addCallback( functionName:String, closure:Function):void,functionName:
要注册的函数名,closure:对应的执行函数。
ActionScript 方法注册为可从容器调用,成功调用 addCallBack() 后,容器中的 JavaScript 或 ActiveX 代码可以调用在 Flash Player 中注册的函数。
在包含 SWF 文件的 HTML 页中,在该文件的 object 标签中设置参数:
代码如下Access" value="always" />
在 SWF 文件中,添加以下 ActionScript:
flash.system.Security.allowDomain(sourceDomain )
这2个说明为了解决安全沙箱的问题,但是实际使用中,我们常常还会遇到更加头疼的问题。
具体实例
Interactive.fla
新建 fla 文件,舞台大小为300*80,颜色为#CCCCCC,类指定为Interactive;
位置(10,15)处添加260*22大小的Label label;
位置(10,50)处添加170*22大小的TextInput textInput;
位置(190,50)处添加100*22大小的Button button。
<script type="text/javascript" src="Interactive.js"></script>
type="application/x-shockwave-flash" width="300" height="80">
function jsMethod(arg) {
alert("as 调用 js 成功,参数为:" + arg);
return ("as 调用 js 成功!");
}
function callAs() {
var myFlexfun = document.getElementById("asFunction");
var result = myFlexfun.callAs(jsInput.value);
alert("返回值:" + result);
}
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.external.ExternalInterface;
public class Interactive extends Sprite
{
public function Interactive()
{
init();
}
private function init():void
{
// 将方法 asMethod 注册为可从容器调用
ExternalInterface.addCallback("callAs",asMethod);
button.addEventListener(MouseEvent.CLICK,buttonClick);
}
private function buttonClick(event:MouseEvent):void
{
trace(textInput.text);
label.text = "as 调用 js ...";
var result:String = callJS(textInput.text);
label.text = "返回值:" + result;
}
// ActionScript 调用 JavaScript;
private function callJS(arg:String):String
{
// 调用指定的 JavaScript 端的函数,并顺序指定传递给 JavaScript 端函数的参数
return ExternalInterface.call("jsMethod",arg);
}
// JavaScript 调用 ActionScript 时,ActionScript 端的函数;
private function asMethod(arg:String):String
{
label.text = arg;
return "js 调用了 as 成功!";
}
}
}