Actionscript 3 AS3:将事件侦听器添加到加载的swf
我正在尝试从已加载的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
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 );