我所采用的方式是Flex+ActiveX控件(也许还有更好的方法:))。
1.Flex中使用ActiveX控件
Flex中使用ActiveX控件我的思路是:
1.Flex中嵌入一个网页。
2.布局网页到Flex界面中合适的位置。
3.在网页中嵌入ActiveX控件。
4.解决ActiveX控件和Flex的互相访问。
很幸运,网上有很多介绍如何在Flex中嵌入网页的文章,其中介绍到了IFrame控件的用法(http://code.google.com/p/flex-iframe/),可以在Flex中使用IFrame控件,如下:
<ns1:IFrame id="iframe_TvWall" source="/TVWall.htm" > </ns1:IFrame>
TVWall.htm就是嵌入ActiveX的网页
2.网页中嵌入ActiveX控件
<OBJECT ID="TVWallAX1" WIDTH="100%" HEIGHT="100%" CLASSID="CLSID:1DD61B8D-F1E6-43B9-82CB-3AD4C290E40F"> <PARAM NAME="_Version" VALUE="65536"> <PARAM NAME="_ExtentX" VALUE="2646"> <PARAM NAME="_ExtentY" VALUE="1323"> <PARAM NAME="_StockProps" VALUE="0"> </OBJECT>
3.Flex调用ActiveX的函数
需要在网页中编写js脚本如下:
<SCRIPT LANGUAGE="JavaScript"> function doCmd(param) { return TVWallAX1.SendCmd(param); } </SCRIPT>
SendCmd是在ActiveX控件中定义的函数,参数为字符串。
Flex可以通过如下程序代码访问ActiveX的函数(Flex通过js访问ActiveX)
iframe_TvWall.callIFrameFunction("doCmd",array);
4.ActiveX控件访问Flex函数
需要在网页中编写js脚本如下:
<SCRIPT LANGUAGE="JavaScript" FOR="TVWallAX1" EVENT="Notify(param)"> <!-- window.parent.document.getElementById("Client").getFlexMsg(param); -->
Client是swf在html文件中的id。
Notify是在ActiveX控件中定义的通知函数,参数为字符串。
Flex代码中需要实现被调用的代码,如下:
ExternalInterface.addCallback("getFlexMsg",getMsgFromFlex); private function getMsgFromFlex(param):void { Alert.show("ok"); }