最近因为项目需要,用到的flex,同时需要与js做数据交互,同时还用到了Google的插件IFrame,总结一点点自己的使用心得,其中很多资料都是在网上Google到的。
- FLEX调用JS:
ExternalInterface.call("callJSMethod")
其中callJSMethod为js的函数名。具体的可以看FLEX的API,有详细的说明。需要注意的是,该JS方法需要在引用该SWF文件的JSP文件中。即:有a.jsp,包含一个b.swf的object,在b.swf中只能调用a.jsp中的方法。如果想要操作其他jsp如何处理?下面会讲到。
- JS调用FLEX:
先需要在FLEX中注册接口方法:
ExternalInterface.addCallback("flexMethod",flexMethod);
前一个参数为JS中调用的函数名称,后一个为在flex中函数。具体的可以查看API文档,有详细的说明。
然后在JSP文件中需要引用该swf文件:
<object id="flexEdit" name="flexEdit" type="application/x-shockwave-flash" width="100%" height="100%" align="middle" >
<param name="movie" value="../swf/flexEdit.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<param name="bgcolor" value="#ffffff" />
<param name="allowscriptaccess" value="*">
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
</object>
然后在JS中调用:
function callFlexMethod(){
var flexObj = document.getElementById("flexEdit");
var par = "";
flexObj.flexMethod(par);}
重点是需要获取swf文件的object,来进行操作。如果是非当前页面需要操作swf呢?那么就需要获取这个含有swf的jsp,然后再进行操作。现在很多都用到了iframe,应该是能够实现的。
- FLEX弹窗
在FLEX中需要用到弹窗,使用也比较简单,代码如下:
public static function addWin():void{
//创建弹出窗体
var openner:IFlexDisplayObject = PopUpManager.createPopUp(this,OpenWindow, true);
//窗体居中
PopUpManager.centerPopUp(openner);
}
其中OpenWindow为需要弹出flex页面,具体的可以看FLEX的API,说的很详细。现在要说的是,使用Google的IFrame插件在flex中嵌套jsp或html等页面。使用也很简单。
插件地址 http://code.google.com/p/flex-iframe
使用方法,在flex的页面中加入:
<flexiframe:IFrame id="testb" label="baidu"source="http://www.baidu.com" width="80%" height="80%" x="5" y="5"/>
具体参数设置可以自己去看慢慢研究。
现在需要说的两个问题是
1.弹出或者引用的JSP页面与FLEX交互的问题。
2.弹出或者引用的JSP页面会遮盖FLEX的问题。
- 先说第一个,给力的网友给出了解决办法。传送门:http://www.iteye.com/topic/1130632
- 再说第二个,IFrame也可以实现。重点就是,得到IFrame的ID,然后调用该IFrame的页面的JS方法即可。已上面的代码为例,取到openner,然后做转换,至于为什么如此操作,小弟也不知,API也没说,往哪位大神解决了,给点指点。
var ow=OpenWindow(openner);
ow.iframeID.callIFrameFunction("callJSPMethod");
iframeID为flex的OpenWindow页面中iframe的ID。具体的参数,可以查看API。
附上IFrame的源文件,其中已加入解决遮盖问题的代码。