我一直在尝试在应用内的文本字段中显示错误,以便于用户报告错误。
我使用在stackoverflow上找到的代码取得了一些成功。它已在应用程序的顶层使用,但它无法在设备上运行:
//start code
this.loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, errorHandler);
function globalErrorHandler(event:UncaughtErrorEvent):void
{
var message:String;
//check for runtime error
if (event.error is Error)
message = (event.error as Error).getStackTrace();
//handle other errors
else if (event.error is ErrorEvent)
message = (event.error as ErrorEvent).text;
else
message = event.error.toString();
//do something with message (eg display it in textfield)
myTextfield.text = message;
}
//end code
首先,这不会对设备起作用,我认为这是因为在出现错误时,在PC上进行开发时,flashplayer会显示带有错误的actionscript弹出窗口。你需要点击"解雇所有"或者关闭然后调用globalErrorHandler然后将错误写入文本字段。我认为这是阻止它出现在设备上的原因。但是,通过添加event.preventDefault(),我可以在桌面上进行开发时抑制actionscript弹出窗口,并且错误已成功写入文本字段。然而,在andriod设备上并非如此。它仍然只是挂起错误。好像无法在Android上禁止默认错误事件。
感谢您的时间。任何帮助表示赞赏!
编辑22/09/2017:我终于能够在设备上看到错误。它与桌面发布时有关,将显示错误。然而,在设备上行为是不同的,有些东西覆盖了文本字段,通过将它带到前面,我能够看到错误。但是,我仍然看到类层次结构中的某些错误没有被捕获。
答案 0 :(得分:1)
在我们的项目中,我们更简单(并且它正在运行):
stage.loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError);
private function onUncaughtError(e:UncaughtErrorEvent):void
{
// Console is basically a TextField for debug/diagnosis output.
if (e.error) Console.error(e.error.getStackTrace());
e.preventDefault();
}
您应该检查的另一件事是您的 TextField 是否实际显示任何文本 ,因为可能存在文本嵌入问题,与错误处理例程无关。 / p>
UPD :加载SWF,使其不与父级混合。
var request:URLRequest = new URLRequest(path);
var context:LoaderContext = new LoaderContext;
context.applicationDomain = ApplicationDomain.currentDomain;
var loader:Loader = new Loader;
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
loader.load(request, context);