apache-flex 当被另一个swf加载时,还有人不能监听uncaughtErrorEvent吗?

yks3o0rb  于 2022-11-01  发布在  Apache
关注(0)|答案(3)|浏览(147)

当我尝试直接加载uncaughtErrorEvents调度程序时,一切都很好,但是当我尝试由另一个swf加载相同的代码时,我得到了一个引用错误。

protected function onAddedToStage(e:Event):void {
    trace("Flash version: " + Capabilities.version);
    try {
      loaderInfo.uncaughtErrorEvents.addEventListener("uncaughtError", onUncaughtError);
      trace("YAY!");
    } catch (e:Error) {
      trace(e);
    }
}

直接加载时的输出(在浏览器中):

Flash version: MAC 10,1,53,64
YAY!

由另一个“加载程序”SWF加载时的输出:

Flash version: MAC 10,1,53,64
ReferenceError: Error #1069: Property uncaughtErrorEvents not found on flash.display.LoaderInfo and there is no default value.

如果其他人能复制这一点,我会很感激。

编辑:也尝试了stage.loaderInfo,而不仅仅是loaderInfo。同样的问题...

wmtdaxz3

wmtdaxz31#

已加载对象的loaderInfo与已初始化对象的loaderInfo不同,并且通过Loader类删除的内容也不同。文档中规定,您必须将侦听器添加到加载程序上的uncaughtErrorEvents,而不是与之关联的loaderInfo:
若要侦测载入之SWF中发生的未捕捉错误,请使用Loader.uncaughtErrorEvents属性,而不要使用Loader.contentLoaderInfo.uncaughtErrorEvents属性。
-livedocs链接
所以你可能要么把它添加到加载器而不是加载器,要么检测是否加载,然后把它添加到父级或其他东西。我知道不优雅,但我能想到的就是绕过它。

af7jpaap

af7jpaap2#

请参阅以下链接:https://bugs.adobe.com/jira/browse/FP-4978
Flash Player中存在一个错误,该错误会影响模块上的uncaughtErrorEvents处理程序
如果您在Adobe的JIRA中注册并投票,该错误将很快得到修复...

rxztt3cl

rxztt3cl3#

我将事件侦听器附加到'root',这对我很有效:

sprite.root.loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError);

在调试Flash Player中,这仍然会出错,但在非调试版本中,错误将出现在Flash Player的对话框中,然后处理程序将做出响应。要阻止对话框出现,请添加:

event.preventDefault();

因此:

private function onUncaughtError(event:UncaughtErrorEvent):void
    {
        event.preventDefault();
        // do something with this error
    }

我在AIR中使用了它,但我认为它也适用于标准的AS3项目。

相关问题