Как я могу обрабатывать IOErrors из HTML Enabled Text Fieds в AS3


Если я загружаю изображения с помощью тега в динамическом текстовом поле и возникает ошибка IOError,то к чему я должен присоединить прослушиватель событий? текстовое поле? Я попробовал это...

var textField:TextField = new TextField();
textField.htmlText = "here is some text <img src='image.jpg'> and then some more";
textField.addEventListener(IOErrorEvent.IOError, function (e:Event):void { trace("error caught") });

Безрезультатно...

Предложения?

3 2

3 ответа:

Вы должны установить id в img , а затем использовать его в getImageReference на вашем TextField, чтобы получить Loader, где вы можете добавить все событие , которое вы хотите:

import flash.display.Loader;
import flash.events.IOErrorEvent;
import flash.text.TextField;

//...
var tfd:TextField = new TextField();
tfd.htmlText = 
      "here is some text <img id='myImg' src='image.jpg' /> and then some more";
var ldr:Loader = tfd.getImageReference("myImg") as Loader;
if (ldr != null) {
 ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
}
//...
private function onIOError(e:IOErrorEvent):void{
 //...
}

Другой пример Здесь Если хотите

У меня есть решение для вас:

tField.addEventListener( Event.ADDED, addedObjectToFieldHandler, true );

function addedObjectToFieldHandler( event:Event ):void
{
   if ( event.target is Loader )
   {
       ( event.target as Loader ).contentLoaderInfo.addEventListener( IOErrorEvent.IO_ERROR, function( e:IOErrorEvent ):void{} );
   }
}

, что предотвратит flashplayer от ошибок и сбоев при разрыве ссылки на изображение

Вы должны использовать блок try catch:

try
{
  var textField:TextField = new TextField();
  textField.htmlText = "here is some text <img src='image.jpg'> and then some more";
}
catch( error:IOError )
{
    //handle IOError
}