Actionscript 3 AS3:将事件侦听器添加到加载的swf

Actionscript 3 AS3:将事件侦听器添加到加载的swf,actionscript-3,events,Actionscript 3,Events,我正在尝试从已加载的SWF中侦听自定义事件,但无法捕获它。现在的加载代码只是: public function loadGame(gameSrc:String,gX:Number,gY:Number):void { var loader = new Loader(); var addedDefinitions:LoaderContext = new LoaderContext(); addedDefinitions.applicationDomain = new Appl

我正在尝试从已加载的SWF中侦听自定义事件,但无法捕获它。现在的加载代码只是:

public function loadGame(gameSrc:String,gX:Number,gY:Number):void {
    var loader = new Loader();
    var addedDefinitions:LoaderContext = new LoaderContext();
    addedDefinitions.applicationDomain = new ApplicationDomain();   
    loader.load(new URLRequest(gameSrc));
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaded);

function onLoaded(evt:Event):void {   
    var game:MovieClip = MovieClip(evt.target.content);

    game.x = gX;
    game.y = gY;    

    chamber.mc_gameHolder.addChild(game);    
    Tweener.addTween(chamber.mc_gameTitle,{alpha:1,time:.75});  

    game.addEventListener("showQuiz",showQuiz);  
}

}
我知道事件是从我加载的SWF中触发的,因为我还有一个监听器,它在触发时跟踪“hello”


有人吗?如果之前已经发布过,请道歉-搜索没有发现任何具体内容

只有当两个SWF都是
AVM2Movie
(使用AS3制作)时,这才有效,我假设这里就是这种情况,因为如果不这样,强制转换到
MovieClip
将在运行时抛出错误


您确定事件是由加载的swf的document类而不是它的一个子类调度的吗?因为您正在调用
game
上的
addEventListener
,它是加载的SWF的文档类(根),它不会捕获其子级调度的事件。能否显示发送事件的代码?

可能是在
事件之前发送了事件。完成
事件。尝试为
事件.INIT
事件添加侦听器。加载程序首次访问加载的swf的文档对象时,会调度
事件.INIT
事件。

hm,它不应该是:

addedFinctions.applicationDomain=applicationDomain.currentDomain
是否允许加载的视频“访问”父视频


此外,出于测试目的,我建议将事件设置为泡泡状,这样您就不会错过中间的显示对象。

我遇到了同样的问题。这是你需要做的。实例化LoaderContext时,请确保LoaderContext使用的是SecurityDomain.currentDomain。这将解决您的问题。

需要考虑的事项:

  • 加载的剪辑应来自启用安全性的域。如果加载闪存所在的域不同,则应将其包含在文件中。而且还装了子弹
  • 通过Security手动设置“allowDomain”。allowDomain指向加载剪辑的域从来都不是坏事
  • 事件应该是冒泡的,因为Flash可能会在“game”var和实际内容之间添加一层或两层容器
  • 加载剪辑和加载剪辑必须为AS3
  • 目标剪辑可能正试图从它自己的适当位置加载内容,因此当您在不同的URL下加载它时,它找不到文件并失败,从一开始就从未到达事件触发阶段

创建一个LoaderContext,将ApplicationDomain设置为currentDomain,然后将其与load()调用一起传递:


通过让加载的swf跟踪来自加载的swf的var或函数调用,可以确认没有跨域问题。如果你得到了预期的结果,SigDounay.xml不是你的问题。

你必须考虑你的情况下的一些事情。 (1) 如果从同一域加载代码,则不需要应用程序域

(2) 如果从不同的域加载代码,请先检查[crossdomain.xml]策略文件。。。第二如果你不想浪费时间修理这个。。。使用PHP并将文件卷曲到您的域。。。然后加载它(Flash会认为它是从同一个域加载的)。

新的ApplicationDomain(ApplicationDomain.currentDomain)=一个新域==无法访问代码。讽刺测试。。。在一个新项目中。。。检查加载程序信息(基本swf类)应用程序域是否与当前应用程序域相同==不相同!您必须使用ApplicationDomain.currentDomain,它仅在基类完全构造之后映射,而不是在构造期间映射。
loader = new Loader();
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, handleLoaded );
var loaderContext:LoaderContext = new LoaderContext(false, new ApplicationDomain( ApplicationDomain.currentDomain ) );
loader.load( new URLRequest("yoMama.swf"), loaderContext );