2010-02-22 24 views
2

Si je charge des images via la balise <img> dans un champ de texte dynamique et qu'une erreur IOError est levée, qu'est-ce que j'attacherais également à l'écouteur d'événement? le champ de texte? J'ai essayé ...Comment gérer les IOErreurs à partir de textes HTML activés dans AS3

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") }); 

en vain ...

Suggestions?

+0

double: http: //stackoverflow.com/questions/309713/flash-textfield- html-how-do-i-empêcher-l'-erreur-dialogue-pour-missing-images-e Je n'ai pas réellement testé la solution que j'ai acceptée (pas de temps à la fois), alors laissez-moi savoir si c'est le cas/ne fonctionne pas pour vous. (Edit: Ok, je ne suis pas si paresseux, je l'essaie ...) –

+0

on dirait que vous avez promis de le tester en mai l'année dernière! –

Répondre

4

Vous devez définir un id-img puis l'utiliser dans getImageReference sur votre TextField pour obtenir le Loader où vous pouvez ajouter tous les Event que vous voulez :

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{ 
//... 
} 

Un autre exemple here si vous voulez

-1

vous devez utiliser un bloc catch try:

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 
} 
+0

Cela ne fonctionne pas réellement, donc la question (et la question qu'il duplique) –

+0

@Jochen Hilgers Non cela ne peut pas fonctionner, utilisez getImageReference. – Patrick

2

j'ai solution pour toi:

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{}); 
    } 
} 

qui empêchera flashplayer de lancer des erreurs et chaque fois que l'accident lien image est cassé

+0

Cela fonctionne et à mon avis une meilleure solution, parce que vous ne devez pas connaître l'id .. – Randalfien