Flex和JavaScript互操作2011-04-10Flex最终会生成swf文件以ActiveX的方式部署网页上(html,jsp,asp,aspx等),由于ActiveX是一个独立体它并不能直接获取页面的元素数据,同样asp,aspx等服务端代码也不对它进行操作,这样Flex的信息交互就变得很孤立。在Web用户程序中不同页的信息交换是非常重要,通常这些信息明确下一个页面应该做什么;如果Flex得不到这些信息那么Flex在实际应用中就大打折扣!于是到网上找一下资料,发现自己的担心是多余的。Flex提供相关对象可以灵活地和当前网页的javascript相互进行灵活的调用。那就是说可以通过javascript调用Flex内部的方法,同样在Flex时也可以直接调用页面上相关的javascript方法。Flex提供了ExternalInterface对象用于和javascript进行互操作。对象分别提供了addCallBack和Cell方法:addCallBack方法用于注册一个内部方法用于给javascript调用。
function callMe(name:String):String {
return name+":" + txtUserName.text;
}
实际上javascript是不能直接调用Flex的内部方法的,那如何使javascript能够调用呢?首先通过ExternalInterface.addCallback("myFunction", callMe);的方法进行注册,可以把方法放在Applicaion. Initialize的事件中。方法第一个参数是:外部调用名称就是javascript调用的方法名称。方法第二个参数是:代理执行Flex的内部函数。javascript通过以下方式调用:
function Button1_onclick() {
alert(document.all("相关ActiveX控件名称").myFunction("bbq"));
}
Call方法用于调用当前页面里的javascript方法.
<script id="clientEventHandlersJS" language="javascript">
function getuserid()
{
return "henry";
}
</script>
在Flex里可以通过以下方式调用getuserid()方法。var id:String= ExternalInterface.call("getuserid");Alert.show(id);


Flex在和javascript整合这方面做得非常好,你并不需要花费太多的工作就能够实现和页面数据元素进行数据交换;同样也可以调用已经有的ajax功能。接下来学习的是不同页面的Flex应用实例如何共享信息。最后还是老话一句,有兴趣的朋友多了解一下Flex.Flex的sdk帮助文件写得还挺详细的,基本上能找到使用的方法。