URLLoader如何获取已加载的URL?

six*_*ude 1 urlloader actionscript-3

无论如何使用URLLoader来获取已加载文件的文件名?

public function loadCSS():void {
    var urlLoader:URLLoader = new URLLoader();
    urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);
    urlLoader.load(new URLRequest("cssFile1"));
    urlLoader.load(new URLRequest("cssFile2"));
    urlLoader.load(new URLRequest("cssFile3"));
}

private function urlLoader_complete(evt:Event):void {

    // *****How can I get the file name here?
    var css:String = URLLoader(evt.currentTarget).data;
    // Do lots of stuff

}
Run Code Online (Sandbox Code Playgroud)

mer*_*erv 5

首先,由于该load方法是异步的,因此代码中的这三个调用将相继覆盖彼此.导致COMPLETE事件被发送的唯一呼叫将是最后一次.如果要异步加载文件,则需要为每个文件创建一个URLLoader实例.

二,(多到你的问题)中有没有属性的URLLoader类,允许您访问URLRequest的是一个load()最初调用.

解决这个问题的一个简单方法是扩展URLLoader.例如,如果您只需要网址:

public class MyURLLoader extends URLLoader
{
    private var _url:String;

    public function MyURLLoader(request:URLRequest=null)
    {
        super(request);
    }

    override public function load(request:URLRequest):void
    {
        super.load(request);
        _url = request.url;
    }

    public function get url():String
    {
        return _url;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的代码中,您仍然可以使用单个事件处理程序:

public function loadAllCSS():void {
    loadCSSFile("cssFile1");
    loadCSSFile("cssFile2");
    loadCSSFile("cssFile3");
}

private function loadCSSFile(cssURL:String):void {
    var urlLoader:MyURLLoader = new MyURLLoader();
    urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);
    urlLoader.load(new URLRequest(cssURL));
}

private function urlLoader_complete(evt:Event):void {
    var cssURL:String = evt.target.url;  //now I know where this came from
    var css:String = evt.data;
}
Run Code Online (Sandbox Code Playgroud)