我正在使用 Flash TextField 控件在 Flash 演示文稿中显示一些 HTML 内容,以便在大型触摸屏信息亭上显示。不幸的是,如果显示的 HTML 内容中的任何图像标签指向不存在的图像,则会显示一个带有错误消息的对话框
Error #2044: Unhandled IOErrorEvent:. text=Error #2035: URL Not Found.
我试图避免弹出该对话。通过加载器类加载内容的解决方案IOErrorEvent.IO_ERROR
是 catch ,但我尝试在 TextField、舞台上、Main 和 loaderInfo 上进行监听,但无济于事。我已经尝试将整个东西包装在一个 try-catch 中,但这也不起作用。
这是我用来寻找解决方案的简化代码:
package {
import flash.display.Sprite;
import flash.errors.IOError;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.text.TextField;
import flash.text.TextFieldType;
public class Main extends Sprite {
public function Main():void {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
var html:TextField = new TextField();
html.type = TextFieldType.DYNAMIC;
html.multiline = true;
html.htmlText = "Bogus image: <img src=\"foo.jpg\" />";
addChild(html);
}
}
}
编辑:这是整个工作代码。
当然,对于动态内容等,您需要一个图像列表和一个生成处理程序的函数等。
package {
import flash.display.Loader;
import flash.display.Sprite;
import flash.errors.IOError;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.text.TextField;
import flash.text.TextFieldType;
public class Main extends Sprite {
public function Main():void {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
var html:TextField = new TextField();
html.type = TextFieldType.DYNAMIC;
html.multiline = true;
html.htmlText = "Bogus image: <img id=\"image\" src=\"foo.jpg\" />";
var loader:Loader = html.getImageReference("image") as Loader;
if(loader){
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function(e:Event):void {
trace("Error loading foo.jpg!");
});
}
addChild(html);
}
}
}