Кто-нибудь еще не может прослушать uncaughtErrorEvent при загрузке другим SWF? - PullRequest
1 голос
/ 11 июня 2010

Когда я пытаюсь получить доступ к диспетчеру 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. Та же проблема ...

Ответы [ 3 ]

1 голос
/ 24 февраля 2011

см. Эту ссылку: https://bugs.adobe.com/jira/browse/FP-4978

В Flash Player есть ошибка, которая влияет на обработчик uncaughtErrorEvents на модулях

Если вы зарегистрируетесь в JIRA Adobe и проголосуете, ошибка будетремонтируется раньше ...

1 голос
/ 11 июня 2010

loaderInfo загруженного объекта отличается от такового для инициализированного объекта, и содержимое класса Loader отличается от него по-разному. в документации говорится, что вы должны добавить прослушиватель uncaughtErrorEvents на загрузчике, а не связанный с ним loaderInfo:

Для обнаружения необнаруженных ошибок, которые происходят в загруженном SWF используйте Свойство Loader.uncaughtErrorEvents, не Loader.contentLoaderInfo.uncaughtErrorEvents имущество.

-livedocs link

так что, предположительно, вам нужно либо добавить его в загрузчик, а не загруженный, либо определить, загружен ли он, а затем добавить его в родительский или что-то вместо этого. я не знаю, но все, что я могу придумать, чтобы обойти это.

0 голосов
/ 14 февраля 2011

Я прикрепил прослушиватель событий к «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.

...