Приложение Flex не отображает изображения, которые иногда загружаются с URL - PullRequest
1 голос
/ 17 января 2011

У меня есть следующий код 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().

Ответы [ 2 ]

0 голосов
/ 17 января 2011

В том случае, если вам не нужно редактировать данные растрового изображения, вы можете попробовать просто взять и отобразить объект, и указав URL в качестве источника.До сих пор это работало на меня, в обязательном порядке.

0 голосов
/ 17 января 2011

Вы проверили, может ли это быть проблемой междоменной политики ?? Если проблема не возникает последовательно, то это не может быть проблемой безопасности.

...