我有一个预加载器,可以像这样加载和附加一个swf:
stage.addChild(loadedSWF);
在loadedSWF中我有一个eventlistener:
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
当关注添加到显示列表的TextField时,onKeyDown停止响应
BUT
当没有预加载器打开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 :(得分: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中工作,但是当它加载到其加载器shell时它将起作用。
答案 1 :(得分:0)
这是一个事件安全问题,我不得不为此发布AS3手册,在冒泡和捕获阶段,事件具有安全限制。在我的情况下,属于预加载器的阶段对于加载的swf是不安全的。
要解决此问题,请将以下行添加到正在加载的swf
Security.addDomain("http://www.yourdomain.com");
我认为此行已经在预加载器中。
另外要检查一个swf是否可以访问它可以在Loader类中附加的父级,你可以使用
l.contentLoader.childAllowsParent