Это ошибка в классе URLLoader, я думаю.
Если вы прочитаете сообщение об ошибке (по крайней мере, то, которое я получил, вы не вставили yorrs!), Вы увидите его:
Ошибка: ошибка № 2029: этот URLStream
у объекта нет открытого потока
на flash.net::URLStream/readBytes ()
на flash.net::URLLoader/onComplete()
Это дает вам некоторое представление о том, что происходит. Класс URLLoader внутренне использует объект URLStream , который обеспечивает низкоуровневый доступ к загруженным данным.
Сообщение об ошибке указывает на то, что обработчик onComplete вызывается на URLLoader. Файл большой, но, вероятно, он кешируется, поэтому загружается довольно быстро. Теперь, если вы добавите прослушиватель для событий хода выполнения и завершения, вы увидите, в каком порядке запускаются события:
Документы подтверждают это:
Обратите внимание, что событие httpStatus (если
любой) отправляется до (и дополнительно
к) любое событие завершения или ошибки.
Теперь вы можете видеть, что проблема в том, что из обработчика состояния вы вызываете close (). Это закрывает поток. Но очевидно (и это ошибка, я думаю), обработчик onComplete в классе URLLoader не проверяет, открыт ли поток или нет. (Из Actionscript нет способа проверить это, поэтому вам придется заключить код в try / catch). Вы не можете читать данные из закрытого потока, поэтому он и дует.
Я вижу 2 способа исправить это:
1) Отложить выполнение функции, которая вызывает close () (ваш метод выгрузки), поэтому close () вызывается после вызывается внутренний метод onComplete URLLoader.
То есть сделать это:
setTimeout(unload,1);
вместо этого:
unload();
2) Используйте URLStream вместо URLLoader. Первый вариант кажется мне хакерским обходным решением, поэтому я бы выбрал последний в вашей ситуации. Использование URLStream в целом означает больше работы на вашей стороне, но в этом случае вы на самом деле не заинтересованы в чтении каких-либо данных, поэтому это не имеет большого значения. Кроме того, вам нужно всего лишь изменить две строки в вашем текущем коде:
Вот этот:
private var _loader:URLStream;
А вот этот:
_loader = new URLStream();
И все готово.