У меня есть следующий код Actionscript в моем приложении Flex 4 для отображения изображений на Sprite.Прекрасно работает в локальном флеш-плеере при разработке:
private function initializePhoto():void {
var photoLoader:Loader = new Loader();
photoLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onPhotoReady);
photoLoader.load(new URLRequest("http://image.mydomain.com/icon/mark.png"));
}
public function onPhotoReady(event:Event):void {
var marker:Bitmap = new Bitmap();
marker.x = -32;
marker.y = -8;
marker.smoothing = true;
marker.bitmapData = event.target.content.bitmapData;
marker.width = 64;
marker.height = 64;
addChild(marker);
}
Поэтому я беру получившийся файл .swf и запускаю его на своем локальном веб-сервере.Выглядит хорошо.Загрузить его в постановку и выглядит хорошо.На следующий день при постановке изображение не появляется!Смущенный, я смотрю на firebug, и он показывает, что изображение на самом деле загружается ... просто не видно.Я смотрю на firebug локально при просмотре приложения на моем локальном веб-сервере, и изображение только иногда появляется!Но всегда он загружает изображение.Он никогда не выходит из строя в режиме разработки через Adobe Flash Player.
Что происходит?Думаю, я немного смущен ... Мои мысли:
- Какая-то проблема безопасности, которой у меня раньше не было.Объяснил бы, почему он всегда работает на автономном Adobe Flash Player и, возможно, причина, по которой я сначала увидел изображения, заключалась в том, что они были кэшированы?
- Состояние гонки, возможно?Объяснил бы, почему Adobe Flash Player работает, потому что он мгновенный .. в то время как локальные и особенно промежуточные серверы имеют небольшую задержку.Может быть, они оказались особенно быстрыми, когда я впервые проверил?
Я предполагаю, что есть какое-то состояние гонки, нужно ли ждать после вызова метода onPhotoReady, прежде чем добавлять Bitmap в Sprite?
ОБНОВЛЕНИЕ : Это очень расстраивает, когда возникают такие проблемы с такой простой операцией (отображение изображения из URL).Поэтому, когда это не удается, происходит событие Event.COMPLETE, которое никогда не запускается.Однако ProgressEvent.PROGRESS всегда запускается дважды (сначала с 0 bytesLoaded, а затем со всеми bytesLoaded).Никаких ошибок не возникает и не выдается.
Интересно, что когда это работает, я вижу в Firebug, что запрашивается http://image.mydomain.com/crossdomain.xml, тогда как не запрашивается , если этого не происходит.работать (хотя обратный вызов ProgressEvent.PROGRESS показывает, что все байты загружены).Я бы предположил, что crossdomain.xml будет называться до получения изображения.
UPDATE 2 :Исправлено простым добавлением дополнительного параметра new LoaderContext(true)
к вызову photoLoader.load()
.