如何在加载的SWF的全局$ init中捕获和异常?

时间:2014-06-19 04:42:31

标签: actionscript-3 exception-handling

我的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()抛出异常时,它们都不会触发。提前谢谢。

1 个答案:

答案 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不会被命中,但这是我决定不处理的边缘情况。