我的Flash程序正在加载包含user code的SWF,该SWF已经实时编译。因为它是用户代码,所以它可能会抛出异常。不幸的是,我似乎无法抓住例外情况。此代码不起作用:
this._loader = new Loader();
this._loader.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError);
this._loader.contentLoaderInfo.addEventListener(Event.COMPLETE, swfCompleteHandler);
this._loader.loadBytes(swfByteArray, loaderContext);
但是,调试播放器在未处理的异常对话框中显示:
[Fault] exception, information=Error: Test error message
at global$init() [User_Code:3]
如何在加载的SWF的全局$ init()中捕获异常?我已经尝试将UNCAUGHT_ERROR事件监听器添加到我可以找到的每个loader和loaderInfo ......但是当从加载的SWF的全局$ init()抛出异常时,它们都不会触发。提前谢谢。
答案 0 :(得分:0)
在我可以的情况下,我在用户的代码中注入了try / catch。例如,如果用户代码只是:
trace("Hello");
我的程序将代码字符串修改为:
try {
trace("Hello");
catch (Error error) { DoSomething(); }
但是,这并不总是有效。例如,如果用户的代码是:
function output():void
{
throw new Error("Error!");
}
output();
然后上面的诀窍不起作用。相反,我会像这样注入代码:
startUserCode();
function output():void
{
throw new Error("Error!");
}
output();
endUserCode();
如果没有命中endUserCode(),我认为抛出了异常。我只是不知道什么是异常。一个讨厌的用户可以在他们的代码中插入一个随机的“返回”,并且endUserCode不会被命中,但这是我决定不处理的边缘情况。