flex调用JavaScript函数
有些时候需要在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的弹出框,运行成功。
