Flex与JavaScript交互
ExternalInterface 实现 JavaScript 与 ActionScript 之间的所有通信,ExternalInterface 类是外部 API,这是一个在 ActionScript 和 Flash Player 容器之间实现直接通信的应用程序编程接口。在 Flash Player 中,可以使用 HTML 页中的 JavaScript 来调用 ActionScript 函数。ActionScript 函数可以返回一个值,JavaScript 会立即接收它作为该调用的返回值。
利用ActionScript,使用call方法,可以在HTMl页上执行以下操作:
- 调用任何 JavaScript 函数。
- 传递任意数量、具有任意名称的参数。
- 传递各种数据类型(Boolean、Number、String 等等)。
- 接收来自 JavaScript 函数的返回值。
通过在 HTML 页上使用 JavaScript,使用addCallback方法,可以:
- 调用 ActionScript 函数。
- 使用标准的函数调用表示法传递参数。
- 将值返回给 JavaScript 函数。
注意:在将 SWF 文件嵌入到 HTML 页中时,请确保 object
和 embed
标签的 id
和 name
属性不包含以下字符: . - + * / \
简单示例:
1: <script language="JavaScript" type="text/javascript">
2: function callFlexFunction() {
3: var x = document.getElementById("JavaScriptTest").flexTest("string from js.");
4: alert(x);
5: }
6:
7: function jsTest(param) {
8: alert(param);
9: return "Return from js:" + param;
10: }
11: </script>
1: <?xml version="1.0" encoding="utf-8"?>
2: <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="intiApp()"
3: width="400" height="200">
4: <mx:Script>
5: <![CDATA[
6: import mx.controls.Alert;
7:
8: public function flexTest(param:String):String
9: {
10: Alert.show("Input param:"+param);
11: return "Return from Flex:"+param;
12: }
13:
14: public function intiApp():void
15: {
16: ExternalInterface.addCallback("flexTest", flexTest);
17: }
18:
19: public function callJS():void {
20: var s:String = ExternalInterface.call("jsTest", "Flex");
21: Alert.show(s);
22: }
23: ]]>
24: </mx:Script>
25:
26: <mx:Button x="52" y="58" label="call javascript" click="callJS()"/>
27: </mx:Application>
28:
点击页面按钮:
点击Flash内按钮