2011-03-05 81 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