0

我想要做的是 - 只需将外部 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

4

1 回答 1

0

ActionScript 2 在不同的虚拟机中运行,并且与 ActionScript 3 不兼容。两个 SWF 之间的通信甚至不容易,但只能在本地连接下工作。ActionScript 2 也没有事件系统,因此这是需要处理的第二部分。

-> 它不能像你期望的那样工作。

于 2013-01-02T14:33:31.900 回答