20.4.在JavaScript中调用ActionScript方法函数

20.4.1 问题
我想在HTML 里调用该HTML 包含的Flex 应用程序的ActionScript 方法。
20.4.2 解决办法
使用ExternalInterface 在JavaScript 里设置对Flex 的回调方法并且在JavaScript 里调用ActionScript 方法。
20.4.3 讨论
ExternalInterface 类不仅仅封装了运行时与JavaScript 通信所需的功能,同时也包含了从JavaScript 内调用ActionScript 方法所有功能。

在JavaScript 调用ActionScript 方法之前,你需要为开放给JavaScript 调用的ActionScript 方法注册一个回调函数。回调函数通过ActionScript 的ExternalInterface 类来注册。回调函数为JavaScript 方法提供一个对ActionScript 方法的映射。

该例示范如何为这三个ActionScript 方法函数注册回调方法。
+展开
-ActionScript
private function registerCallbacks() : void
{
ExternalInterface.addCallback( "function1", callback1 );
ExternalInterface.addCallback( "function2", callback2 );
ExternalInterface.addCallback( "function3", callback3 );
}

这些方法的对应ActionScript 方法为:
+展开
-ActionScript
private function callback1() : void
{
Alert.show( "callback1 executed" );
}
private function callback2( parameter : * ) : void
{
Alert.show( "callback2 executed: " + parameter.toString() );
}
private function callback3() : Number
{
return Math.random()
}

注意到callback1 是一个可调用的简单ActionScript 方法。它没有参数也没有返回值。callback2需要一个单参数,而callback3 则返回一个随机生成的数值。

当你想要从JavaScript 里面调用这些方法的时候,必须使用回调别名调用JavaScript 方法。

下面的JavaScript 代码将展示如何调用已注册开放的ActionScript 函数。
+展开
-JavaScript
function invokeFlexFunctions()
{
var swf = "mySwf";
var container;
//alert(navigator.appName); //不加这个测试不通过,不知为何,Firefox 均不通过
if (navigator.appName.indexOf("Microsoft") >= 0)
{
container = document;
}
else
{
container = window;
}
//alert(container[swf]); //在FireFox,这个是undefined
container[swf].function1();
container[swf].function2( "myParameter" );
var result = container[swf].function3();
alert( result );
}

当被嵌入到HTML 页面时,swf 包含该Flex 应用程序的名称(name 属性,在本节例子中为mySwf)。该脚本做的第一件事是基于浏览器的类型获取到该JavaScript DOM 的引用。在脚本有了正确的浏览器DOM 后,它就可以根据注册回调的时候声明的公共开放映射关系来调用Flex 方法。

通过调用JavaScript 内Flex 应用程序实例的function1 回调函数来简单调用ActionScript 的callback1 方法。
+展开
-JavaScript
container[swf].function1();

该方法被调用后,Flex 应用程序里会显示一个alert 信息。

通过调用function2 回调函数并传入一个值,即可简单调用ActionScript 方法callback2:
+展开
-JavaScript
container[swf].function2( "myParameter" );

调用的时候,该例会在Flex 应用程序里弹出一个Alert 窗口来显示JavaScript 调用的时候指定的参数值。

下面的例子展示如何从Flex 返回值到JavaScript 中。function3 回调函数调用callback3ActionScript 方法。该ActionScript 方法返回一个随机生成的数值给JavaScript。

当调用callback3 时,Flex 生成一个随机数,并返回给JavaScript。然后该值会显示在一个JavaScript 的alert 窗口中。例如:
+展开
-JavaScript
var result = container[swf].function3();
alert( result );

加支付宝好友偷能量挖...


评论(0)网络
阅读(121)喜欢(0)flash/flex/fcs/AIR