酷符网Flex > 正文

flex调用JavaScript函数

2010-12-16 18:39codeif.com

有些时候需要在flex里调用JavaScript的函数,flex与JavaScript是通过ExternalInterface类来连接的。该类有两个方法call(functionName:String, … arguments)和addCallback(functionName:String, closure:Function)可以实现在flex里调用JavaScript函数。
1.方法说明:
public static function call(functionName:String, … arguments):*
调用由 Flash Player 容器公开的函数,不传递参数或传递多个参数。如果该函数不可用,调用将返回 null;否则,它返回由该函数提供的值。不允许在 Opera 或 Netscape 浏览器中使用递归;在这些浏览器上,递归调用将生成 null 响应。(Internet Explorer 和 Firefox 浏览器上支持递归。)

public static function addCallback(functionName:String, closure:Function):void
将 ActionScript 方法注册为可从容器调用。成功调用 addCallBack() 后,容器中的 JavaScript 或 ActiveX 代码可以调用在 Flash Player 中注册的函数。
注意:对于在浏览器中运行的本地内容,仅当 SWF 文件以及包含它的网页位于受信任的本地安全沙箱中时,对 ExternalInterface.addCallback() 方法的调用才有效

以上信息均可以在flex api中找到。这里不在详细说明。

2.实例:
JavaScript可以直接写在html里面,但在flexBuilder集成开发环境中html都是有IDE自动生成的,这里为了举例方便,直接在flex的ActionScript里面里面构建JavaScript函数。具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
				   xmlns:s="library://ns.adobe.com/flex/spark"
				   xmlns:mx="library://ns.adobe.com/flex/mx">
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.core.FlexGlobals;
			private function start():void {
				if(ExternalInterface.available){
					ExternalInterface.addCallback("resultHandler",resultHandler);
					var js:String = "function hh(){" +
						"document.title='aaaaaa';" +
						"var obj = document."+FlexGlobals.topLevelApplication.className
									+"||window."+FlexGlobals.topLevelApplication.className+";" +
						"obj.resultHandler();}";
					ExternalInterface.call(js);
				}
			}
			public function resultHandler():void {
				Alert.show("success");
			}
		]]>
	</fx:Script>
	<s:HGroup horizontalAlign="center" width="100%" paddingTop="50">
		<s:Button id="btnBrowser" click="start()" x="10" y="10" label="Button" />
	</s:HGroup>

</s:Application>

运行之后点击按钮,如果弹出输出success的弹出框,运行成功。

相关文章

新浪微博 | 淘段子 | 我的博客 | 淘宝店铺 | jnan.org | RSS
Copyright © 2009 - 2011 酷符网