我想要做的是 - 只需将外部 SWF 加载到我的 AS3 代码中。
然后我想在我的舞台上展示它——并且能够捕捉到 SWF 发生的“ROLL_OVER”、“ROLL_OUT”和“MOUSE_CLICK”事件,这意味着——我想知道用户何时将鼠标悬停在加载的 SWF 上以及何时他点击它。
如果我加载外部AS3 SWF - 一切正常,我可以成功跟踪事件。
如果我加载外部AS2 SWF - 在某些类型的 AS2 横幅中,我可以捕捉到事件,而在某些类型中 - 我不能。
需要注意的是,我无法控制加载的 SWF,也无法以不同的方式对它们进行编码。
我加载外部 SWF 的方式是这样的:
.
var loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaded);
loader.load(new URLRequest(externalSwfURL));
function onLoaded(evt:Event):void
{
// The reason I don't create the MovieClip like this is because I need to support
// both AS2 and AS3 that will be loaded, and loaded AS2 cannot be casted to 'MovieClip'
//var mc:MovieClip = MovieClip(evt.target.content);
// This method allows me to load both external AS2 and AS3 SWF files
var mc:MovieClip = new MovieClip();
mc.addChild(loader);
// Add the events that I want to track
mc.addEventListener(MouseEvent.ROLL_OVER , onMouseEnterSWF);
mc.addEventListener(MouseEvent.ROLL_OUT , onMouseLeaveSWF);
mc.addEventListener(MouseEvent.CLICK , onMouseClickSWF);
mc.x = 100;
mc.y = 100;
stage.addChild(mc);
}
.
我发现如果加载的 AS2 SWF 顶部有一个透明按钮(其中很多都有) - 那么鼠标事件不会被触发回我的 AS3 代码!它们以某种方式被“吞噬”在加载的 AS2 SWF 中,而不是冒泡。
如果我尝试加载具有透明按钮作为顶层的 AS3 SWF - 它可以工作,并且仍然将鼠标事件冒泡到我的 AS3 代码中。
谁能告诉我为什么会这样?
PS - 如果我加载一个没有透明按钮的 AS2 SWF 作为顶层 - 鼠标事件就会冒泡到我的 AS3 代码中。
这是一个指向 AS2 SWF 文件的链接,该文件具有阻止事件冒泡到 AS3 代码的“透明按钮”: link to AS2 SWF