Почему IOErrorEvents не содержит URL при автономной работе?

Вот простой пример URLLoader,

var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("http://example.com/doesntexist.txt");
loader.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent){
    textbox.text = e.toString(); // Text box on stage
});
loader.load(request);

Это ведет себя странно.

При запуске из Flash или отладке из Flash ошибка выглядит следующим образом.

[IOErrorEvent type = "ioError" bubbles = false cancellable=false eventPhase=2 text="Ошибка № 2032: ошибка потока. URL: http://example.com/doesntexist.txt "]

Но, когда работает как .swf или .exe проектор, это выглядит так.

[IOErrorEvent type = "ioError" bubbles = false отменяемый = false eventPhase = 2 text = "Ошибка #2032"]

Почему это так? Есть ли способ получить первый результат в автономном режиме?

РЕДАКТИРОВАТЬ: Мне нужно, чтобы он работал как проектор.

2 ответа

Решение

Хотя я не уверен в том, почему (возможно, за кулисами в флеш-плеере стоит вопрос эффективности), вот способ выполнить то, что вам нужно:

Вы можете написать собственный класс, который расширяет URLLoader который хранит URL для вас.

package 
{
    import flash.net.URLLoader;
    import flash.net.URLRequest;

    public class MyURLLoader extends URLLoader
    {
        public var request:URLRequest; //all were doing here is adding this public property and setting it when loading into the URLLoader

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

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

Затем при обработке вашей ошибки вы можете ссылаться на URL следующим образом:

var loader:MyURLLoader = new MyURLLoader();
var request:URLRequest = new URLRequest("http://example.com/doesntexist.txt");

loader.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent){
    textbox.text = e.toString() + " URL: " + MyURLLoader(e.currentTarget).request; // Text box on stage
});
loader.load(request);

Установите Debugger Flash Player по адресу: http://www.adobe.com/support/flashplayer/downloads.html Это поможет вам.

Другие вопросы по тегам