0
var url:String;
var link:String;
var w:Number;
var h:Number;

url = loaderInfo.parameters.swfurl;
link = loaderInfo.parameters.link;

var request:URLRequest = new URLRequest(url);
var loader:Loader = new Loader();

loader.load(request);
addChild(loader);


loader.addEventListener(MouseEvent.CLICK, onClick);

function onClick(e:MouseEvent){
        trace('clicked');
}

这个脚本向我展示了外部 swf 文件。但是 MouseEvent.CLICK 不起作用。为什么?

4

2 回答 2

2

您究竟作为外部资源加载了什么。如果它是 SWF,那么那里有什么东西。此外,我建议在加载 swf 后附加侦听器。即在 Event.COMPLETE 处理程序中。这是文档中的代码:

package {
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLRequest;

public class LoaderExample extends Sprite {
    private var url:String = "Image.gif";

    public function LoaderExample() {
        var loader:Loader = new Loader();
        configureListeners(loader.contentLoaderInfo);
        loader.addEventListener(MouseEvent.CLICK, clickHandler);

        var request:URLRequest = new URLRequest(url);
        loader.load(request);

        addChild(loader);
    }

    private function configureListeners(dispatcher:IEventDispatcher):void {
        dispatcher.addEventListener(Event.COMPLETE, completeHandler);
        dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
        dispatcher.addEventListener(Event.INIT, initHandler);
        dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
        dispatcher.addEventListener(Event.OPEN, openHandler);
        dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
        dispatcher.addEventListener(Event.UNLOAD, unLoadHandler);
    }

    private function completeHandler(event:Event):void {
        trace("completeHandler: " + event);
    }

    private function httpStatusHandler(event:HTTPStatusEvent):void {
        trace("httpStatusHandler: " + event);
    }

    private function initHandler(event:Event):void {
        trace("initHandler: " + event);
    }

    private function ioErrorHandler(event:IOErrorEvent):void {
        trace("ioErrorHandler: " + event);
    }

    private function openHandler(event:Event):void {
        trace("openHandler: " + event);
    }

    private function progressHandler(event:ProgressEvent):void {
        trace("progressHandler: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
    }

    private function unLoadHandler(event:Event):void {
        trace("unLoadHandler: " + event);
    }

    private function clickHandler(event:MouseEvent):void {
        trace("clickHandler: " + event);
        var loader:Loader = Loader(event.target);
        loader.unload();
    }
}

}

所以尝试在 completeHandler 方法中附加监听器。

于 2012-06-19T07:45:19.387 回答
1

如果您在屏幕上看到内容,则问题可能与单击事件处理有关:

点击事件的目标可能是显示列表中低于加载程序的内容(例如加载程序内容或其中的子项 - 也就是说,您没有单击加载程序,而是单击了其中的 MovieClip)。您可以根据自己的要求尝试几种不同的方法:

  1. 使用 useCapture=true 收听(这将记录对加载电影中任何内容的任何点击):

    loader.addEventListener(MouseEvent.CLICK, onClick, true);
    
  2. 在加载器上禁用 mouseChildren。这将意味着点击事件将在加载器处停止,并且不会在加载器的子项中注册:

    loader.mouseChildren = false;
    loader.addEventListener(MouseEvent.CLICK, onClick);
    
    • 请注意,这可能会导致希望加载的 swf 中的单击事件(如按钮)的内容不起作用。但是如果加载器内容不打算是交互式的,这应该没问题。
于 2012-06-19T14:20:03.750 回答