在Flex中,调用SWFLoader的时候,有的时候,需要调用里面的方法,可是问题来了,我们该如何判断SWFLoader load进来的swf已经完成了本身的初始化呢?
我们知道,在Flex编译后的swf与flash编译出来的swf最大的区别为,Flex编译出来的只包含两帧,一个初始化帧,一个执行帧。好啦,我们明白这个后,就可以解决上面的问题啦。
SWFLoader 在load source中的swf,我们可以监听SWFLoader的init事件,这个事件在派发的时刻为,load的swf已经初始化完成了第一帧,这个时候,我们是可以取得load进来的swf的对象,然后我们再这个事件中监听load进来的swf的FlexEvent.APPLICATION_COMPLETE。当我们收到了FlexEvent.APPLICATION_COMPLETE事件后,这个时候,我们就可以调用load进来的swf的方法了,代码如下:
初始化加入swf对象
protected function creationCompleteHandler(event:FlexEvent):void
{
tempSWFLoader = new SWFLoader();
tempSWFLoader.percentHeight = 100;
tempSWFLoader.percentWidth = 100;
tempSWFLoader.left = "20";
tempSWFLoader.top = "20";
tempSWFLoader.bottom = "20";
tempSWFLoader.right = "-2";
tempSWFLoader.maintainAspectRatio = false;
tempSWFLoader.loaderContext = new LoaderContext(false,ApplicationDomain.currentDomain);
tempSWFLoader.scaleContent = true;
tempSWFLoader.loadForCompatibility = false;
tempSWFLoader.mask = maskCanvas;
tempSWFLoader.addEventListener(Event.INIT, initHandler);
tempSWFLoader.source = "aaaa.swf";
this.addElement(tempSWFLoader);
this.addEventListener(RightClickManager.RIGHT_CLICK,mouseClick);
}
监听swf的初始化事件
private function initHandler(event:Event):void {
event.target.content.addEventListener(FlexEvent.APPLICATION_COMPLETE,
applicationCompleteHandler);
}
监听load进来的swf的FlexEvent.APPLICATION_COMPLETE
private function applicationCompleteHandler(event:Event):void {
event.target.application.getParameteList();
}