2011-03-05 75 views
0

我有一个预加载器加载和附着的SWF像这样:AS3预载事件监听奇异

stage.addChild(loadedSWF); 

在loadedSWF我有一个事件监听:

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); 

当一个TextField添加到显示列表聚焦中,onKeyDown停止响应

当loadedSWF在没有预加载器的情况下打开时,onKeyDown在焦点位于TextField时工作

为什么会发生这种情况?这如何被控制?

这里是预载:

l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loop); 
    l.contentLoaderInfo.addEventListener(Event.COMPLETE, done); 
    l.load(new URLRequest("http://www.foo.com/foo.swf")); 

    function loop(e:ProgressEvent):void 
    { 
     perc = Math.round(e.bytesLoaded/e.bytesTotal * 100); 
     lt.text = String(perc); 
     if (perc >= 100) 
      l.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, loop); 
    } 

    function done(e:Event):void 
    { 
     l.contentLoaderInfo.removeEventListener(Event.COMPLETE, done); 
     stage.addChild(l); 
    } 
+0

岂不预加载,然后是问题吗?你应该为它发布一些代码。 – 2011-03-05 21:39:33

+0

在问题 – RValentine 2011-03-05 22:02:14

回答

0

这是一个事件安全问题,我不得不在这个问题上抽出AS3手册,在冒泡和捕获阶段事件有安全限制。在我的情况下,属于preloader的舞台对于加载的swf并不安全。

为了解决这个问题,下面的行添加到SWF文件被加载

Security.addDomain("http://www.yourdomain.com");

我认为这一行已经在预加载。

另外要检查,如果一个swf访问它连接Loader类中的父母,你可以使用

l.contentLoader.childAllowsParent

0

把你的键盘事件的实例为onAddedToStage事件。

addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 

function onAddedToStage(evt:Event):void 
{ 
    removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); 
} 

这会从独立的SWF停止工作,但是当加载到其装载壳它会工作。

+0

中增加了预加载器EventListener已经处于onAddedToStage事件中:( – RValentine 2011-03-05 23:24:15

+0

呃,这是我的猜测:) – Ribs 2011-03-05 23:27:49