原理跟Silverlight中的几乎如出一辙(见Silverlight如何与JS相互调用):
ActionScript3代码:
btnCallJs.addEventListener(MouseEvent.CLICK,fnCallJs);
function
fnCallJs(e:MouseEvent):
void
{
trace
(
"准备调用..."
);
//调用js中的JsHello方法,并将返回值显示到Label中
lblResult.text=ExternalInterface.call(
"JsHello"
,
"AS3传递的参数"
);
}
function
CalledByJs(p:
String
):
String
{
return
"Flash中的CalledByJs被调用了,这是js中传过来的参数:"
+ p;
}
ExternalInterface.addCallback(
"MyFunction"
,CalledByJs);
//这里:MyFunction就是暴露给js调用的方法名称
嵌入flash的页面中这样处理:
<
object
classid
=
"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
...
id
=
"Js_AS3"
>
... </
object
>
<
script
type
=
"text/javascript"
>
function JsHello(msg){
var r = "这是js中的方法,参数:" + msg;
alert(r);
return r;
}
function fnCallAs(msg){
var flashObj = document.getElementById("Js_AS3");
var sAsReturn = flashObj.MyFunction("js中的参数");
alert(sAsReturn);
}
fnCallAs("test");
</
script
>
<script type="text/javascript"></script>