最近在一个项目中,要在一个flex 窗体titleWindow中嵌入一个html页面,因为flex要加载一个weboffice控件,而只能在html页面中加载,所以就出现了在flex中通过嵌入一个html页面的现象。
方式:在titleWindow中嵌入一个iframe ,然后source指向加载控件的html页面,遇到的问题:
1. 如何调用html中的方法,如何在html加载完成后,flex传值给html页面。
2. 如何调用当html页面关闭时将传值给flex页面一个返回值。
分析:在网上可以找到很多的对于flex和js交互的示例,而且事实中,解决问题2是很容易解决的,但是对于1采用网上的方式就无法解决,这是因为,只有在html中嵌入flex的页面中js方法才可以直接调用flex 中的方法。
解决方案:
1. 对于问题一,在js中调用flex方法,首先要活动flex的引用,即一个source ID,显然在现在的情况是无法调用到的,所以才用flex与js桥接的方式,在html初始化时,对js添加了一个事件监听,然后在flex中抛出一个事件,通过这个时间来调用js中的方法
function load()
{
this.parent.FABridge.addInitializationCallback("flash", function()
{
flexApp = parent.FABridge.flash.root();
flexApp.addEventListener("WordEditorEvent", function(event)
{
LoadFile(event.getParametersStr());
});
});
}
WordEditorEvent 为自定义的一个事件,然后通过在flex中定义一个事件,然后传参数过来,调用js的方法LoadFile();
2. 对于问题2 ,直接在flex页面初始化时,添加一个回调方式,如下:
ExternalInterface.addCallback("closeWnd",closeWnd);
前一个closeWnd为在js调用flex的方法名,而后一个是在flex中定义的方法名,