Flash AS3预加载事件侦听器陌生度

Flash AS3预加载事件侦听器陌生度,flash,actionscript-3,preloader,addeventlistener,Flash,Actionscript 3,Preloader,Addeventlistener,我有一个预载器,可以加载和连接swf,如下所示: stage.addChild(loadedSWF); 在loadedSWF中,我有一个eventlistener: stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); 当添加到显示列表的文本字段被聚焦时,onKeyDown停止响应 但是 当loadedSWF在没有预加载程序的情况下打开时,onKeyDown在焦点位于文本字段时工作 为什么会发生这种情况?如何控制这种情况? 这是

我有一个预载器,可以加载和连接swf,如下所示:

stage.addChild(loadedSWF);
在loadedSWF中,我有一个eventlistener:

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
当添加到显示列表的文本字段被聚焦时,onKeyDown停止响应

但是

当loadedSWF在没有预加载程序的情况下打开时,onKeyDown在焦点位于文本字段时工作

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

这是预加载程序:

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);
    }

将键盘事件的实例化放入OnAddedStatage事件中

addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

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

这将阻止它在独立swf中工作,但它在加载到其loader shell中时仍能工作。

这是一个事件安全问题,我不得不为此退出AS3手册,在冒泡和捕获阶段,事件有安全限制。在我的情况下,属于预载器的阶段对于加载的swf是不安全的

要解决此问题,请将以下行添加到正在加载的swf

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

我假设这条线已经在预加载程序中

还要检查swf是否有权访问它附加在您可以使用的加载程序类中的父级


l.contentLoader.childAllowsParent

那么预加载程序不是问题吗?您可能应该发布一些代码。将预加载程序添加到questionwell便便中。这是我的猜测:)