我正在尝试从我加载的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中被触发的,因为我还有一个监听器,当它被触发时会跟踪出一个“你好”。
任何?并且如果之前已经发布过道歉 - 搜索没有发现具体的内容。
答案 0 :(得分:2)
我遇到了同样的问题。这是你需要做的。在实例化LoaderContext时,请确保LoaderContext正在使用SecurityDomain.currentDomain。这将解决您的问题。
答案 1 :(得分:1)
这只适用于两个SWF都是AVM2Movie
(使用AS3制作)的情况,我认为这是一种情况,因为否则转换为MovieClip
会在运行时抛出错误。
您确定该事件是由加载的swf的文档类调度的,而不是由其中一个孩子调度的吗?因为您在addEventListener
上调用game
,这是加载的SWF的文档类(根),并且它不会捕获由其子项分派的事件。你能展示发送活动的代码吗?
答案 2 :(得分:0)
有可能在Event.COMPLETE
事件之前调度事件。尝试为Event.INIT
事件添加侦听器。当Loader首次访问加载的swf的文档对象时,将调度Event.INIT
事件。
答案 3 :(得分:0)
嗯,不应该是:
addedDefintions.applicationDomain = ApplicationDomain.currentDomain
允许加载的视频“访问”父视频吗?
同样出于测试目的,我建议冒泡事件,以使您没有错过任何显示对象。
答案 4 :(得分:0)
需要考虑的事项:
答案 5 :(得分:0)
创建一个LoaderContext,将ApplicationDomain设置为currentDomain,然后使用load()调用传递它:
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 );
您可以通过加载swf跟踪来自加载的swf的var或函数调用来确认您没有跨域问题。如果您得到了预期的结果,那么crossdomain.xml不是您的问题。
答案 6 :(得分:0)
在你的情况下你必须考虑一些事情。
(1)如果您要从SAME域加载代码,则不需要应用域。
(2)如果您从不同的域加载代码,请首先检查[crossdomain.xml]策略文件...第二...如果您不想浪费时间修复此问题...使用PHP并卷曲文件到你的域...然后加载(Flash会认为它从同一个域加载它)。