Справочник по ActionScript® 3.0 для платформы Adobe® Flash®
Домашняя страница  |  Скрыть список пакетов и классов |  Пакеты  |  Классы  |  Что нового  |  Указатель  |  Приложения  |  Почему по-английски?
Фильтры: Получение данных с сервера...
Получение данных с сервера...
flash.events 

UncaughtErrorEvent  - AS3

Пакетflash.events
Классpublic class UncaughtErrorEvent
НаследованиеUncaughtErrorEvent Inheritance ErrorEvent Inheritance TextEvent Inheritance Event Inheritance Object

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 10.1, AIR 2

Объект UncaughtErrorEvent отправляется экземпляром класса UncaughtErrorEvents при возникновении неперехваченных ошибок. Неперехваченные ошибки возникают, когда ошибка выдается за пределами блока try..catch или когда отправляется объект ErrorEvent, для которого не зарегистрирован прослушиватель. Функция обработки событий неперехваченных ошибок часто описывается как глобальный обработчик ошибок.

Объект UncaughtErrorEvents, который отправляет событие, связан или с объектом LoaderInfo или с объектом Loader. Используйте следующие свойства, чтобы получить доступ к экземпляру UncaughtErrorEvents.

  • LoaderInfo.uncaughtErrorEvents позволяет обнаружить неперехваченные ошибки в коде, определенном в том же SWF-файле.
  • Loader.uncaughtErrorEvents позволяет обнаружить неперехваченные ошибки в коде, определенном в SWF-файле, который загружен в объекте Loader.

Когда отправляется событие uncaughtError даже в случае обработки события, исключение не сохраняется в стеке вызова, вызвавшем ошибку. Если ошибка является синхронной, оставшийся код функции, в которой возникла ошибка, не выполняется. Следовательно, существует вероятность, что в случае возникновения неперехваченной ошибки приложение будет находиться в нестабильном состоянии. Так как существует много причин возникновения неперехваченных ошибок, невозможно предсказать доступность той или иной функции. Например, приложение может иметь возможность выполнять сетевые операции или операции с файлами. Однако эти операции могут быть недоступными.

Когда один SWF-файл загружает другой, события uncaughtError опускаются по нисходящей цепочке, а затем снова поднимаются по иерархии LoaderInfo. Предположим, что файл A.swf загружает файл B.swf с помощью экземпляра Loader. Если в файле B.swf возникает неперехваченная ошибка, отправляется событие uncaughtError объектам LoaderInfo и Loader в следующей последовательности:

  1. (Фаза захвата) объект LoaderInfo файла A.swf
  2. (Фаза захвата) объект Loader в файле A.swf
  3. (Фаза цели) объект LoaderInfo файла B.swf
  4. (Фаза восходящей цепочки) Loader в файле A.swf
  5. (Фаза восходящей цепочки) объект LoaderInfo файла A.swf

Свойство uncaughtErrorEvents объекта Loader никогда не отправляет события uncaughtErrorEvent в фазе цели. Оно только отправляет события в фазах захвата и восхождения по цепочке.

Как и при восхождении других событий, вызов метода stopPropagation() или stopImmediatePropagation() препятствует отправке события другим прослушивателям, но с одним важным различием. Событие UncaughtErrorEvents объекта Loader рассматривается как пара события LoaderInfo.uncaughtErrorEvents загруженного SWF-файла с целью распространения событий. Если прослушиватель, зарегистрированный для одного из этих событий, вызывает метод stopPropagation(), события все равно отправляются другим прослушивателям, зарегистрированным для этого объекта UncaughtErrorEvents, и для его парного объекта UncaughtErrorEvents, до завершения распространения события. Метод stopImmediatePropagation() все же предотвращает отправку событий всем дополнительным прослушивателям.

Когда содержимое выполняется в отладочной версии среды выполнения, например в отладочной версии Flash Player или AIR Debug Launcher (ADL), при обнаружении неперехваченной ошибки появляется соответствующее диалоговое окно. Для таких сред выполнения диалоговое окно ошибки появляется, даже когда зарегистрирован прослушиватель для события uncaughtError. Чтобы диалоговое окно не появлялось в такой ситуации, нужно вызвать метод preventDefault() объекта UncaughtErrorEvent.

Если содержимое, загруженное объектом Loader, является SWF-файлом версии AVM1 (ActionScript 2), неперехваченные ошибки в этом файле не приводят к отправке события uncaughtError. Кроме того, ошибки JavaScript в HTML-содержимом, загруженном в объекте HTMLLoader (включая элемент управления HTML во Flex), не приводят к отправке события uncaughtError.

Посмотреть примеры

Связанные элементы API



Общедоступные свойства
 СвойствоОпределено
 Inheritedbubbles : Boolean
[только для чтения] Определяет, является ли событие событием восходящей цепочки.
Event
 Inheritedcancelable : Boolean
[только для чтения] Указывает, можно ли предотвратить поведение, связанное с событием.
Event
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
 InheritedcurrentTarget : Object
[только для чтения] Объект, активно обрабатывающий объект Event с помощью прослушивателя событий.
Event
  error : *
[только для чтения] Объект ошибки, связанный с неперехваченной ошибкой.
UncaughtErrorEvent
 InheritederrorID : int
[только для чтения] Содержит ссылочный номер, связанный с конкретной ошибкой.
ErrorEvent
 InheritedeventPhase : uint
[только для чтения] Текущая фаза в потоке событий.
Event
 Inheritedtarget : Object
[только для чтения] Целевой объект события.
Event
 Inheritedtext : String
Для события textInput — введенный пользователем знак или последовательность знаков.
TextEvent
 Inheritedtype : String
[только для чтения] Тип события.
Event
Общедоступные методы
 МетодОпределено
  
UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)
Создает объект UncaughtErrorEvent, который содержит информацию о событии uncaughtError.
UncaughtErrorEvent
  
[переопределить] Создает копию объекта UncaughtErrorEvent и задает значение каждого свойства, совпадающее с оригиналом.
UncaughtErrorEvent
 Inherited
formatToString(className:String, ... arguments):String
Служебная функция для реализации метода toString() в пользовательских классах ActionScript 3.0 Event.
Event
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Проверяет, выполнялся ли для события вызова метода preventDefault().
Event
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
 Inherited
Отменяет поведение по умолчанию для события, если такое поведение можно отменить.
Event
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
 Inherited
Отменяет обработку прослушивателей событий в текущем узле, а также во всех узлах, которые следуют в потоке событий за текущим узлом.
Event
 Inherited
Отменяет обработку прослушивателей событий в узлах, которые следуют в потоке событий за текущим узлом.
Event
 Inherited
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали.
Object
  
[переопределить] Возвращает строку, содержащую все свойства объекта UncaughtErrorEvent.
UncaughtErrorEvent
 Inherited
Возвращает элементарное значение заданного объекта.
Object
Общедоступные константы
 КонстантаОпределено
  UNCAUGHT_ERROR : String = "uncaughtError"
[статические] Определяет значение свойства type объекта события uncaughtError.
UncaughtErrorEvent
Сведения о свойстве

error

свойство
error:*  [только для чтения]

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 10.1, AIR 2

Объект ошибки, связанный с неперехваченной ошибкой. Как правило, этот объект имеет один из следующих типов данных:

  • экземпляр Error (или одного из подклассов), если неперехваченная ошибка является синхронной и создана инструкцией throw, например ошибка, которую можно перехватить с использованием блока try..catch
  • экземпляр ErrorEvent (или одного подклассов), если неперехваченная ошибка является асинхронной и отправляет событие ошибки при возникновении.

Однако свойство error потенциально может быть объектом любого типа данных. ActionScript не требует, чтобы инструкция throw использовалась только с объектами Error. Например, следующий код является верным и во время компиляции и время выполнения.

throw new Sprite()

Если эта инструкция throw не перехватывается блоком try..catch, то инструкция throw отправляет событие uncaughtError. В таком случае свойство error отправляемого объекта UncaughtErrorEvent является объектом Sprite, созданным в инструкции throw.

Следовательно, прослушиватель события uncaughtError должен проверять тип данных свойства error. Следующий пример иллюстрирует такую проверку.

         function uncaughtErrorHandler(event:UncaughtErrorEvent):void
         {
             var message:String;
             
             if (event.error is Error)
             {
                 message = Error(event.error).message;
             }
             else if (event.error is ErrorEvent)
             {
                 message = ErrorEvent(event.error).text;
             }
             else
             {
                 message = event.error.toString();
             }
         }

Если свойство error содержит экземпляр Error (или подкласса Error), доступная информация об ошибке различается в зависимости от версии среды выполнения следующим образом:

  • В отладочной версии среды выполнения, например в отладочной версии Flash Player или в AIR Debug Launcher (ADL):

    • Метод Error.getStackTrace() служит для получения списка вызовов, который стал причиной ошибки.
    • Свойство Error.message содержит полный текст сообщения об ошибке.
  • В неотладочной версии среды выполнения:

    • Метод Error.getStackTrace() служит для получения списка вызовов, который стал причиной ошибки. Однако данная информация о списке вызовов не включает имена исходных файлов и номера строк.
    • Свойство Error.message содержит короткую версию сообщения об ошибке, которая обычно является комбинацией свойств Error.errorID и Error.name.
  • В неотладочной версии среды выполнения (Flash Player 11.4 или более ранней версии, AIR 1.4 или более ранней версии):

    • Метод Error.getStackTrace() возвращает значение null.
    • Свойство Error.message содержит короткую версию сообщения об ошибке, которая обычно является комбинацией свойств Error.errorID и Error.name.

Все остальные свойства и методы класса Error доступны во всех версиях среды выполнения.

Обратите внимание, что в тех случаях, когда свойство error является экземпляром класса ErrorEvent, информация о списке вызовов всегда недоступна.



Реализация
    public function get error():*
Сведения о конструкторе

UncaughtErrorEvent

()Конструктор
public function UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 10.1, AIR 2

Создает объект UncaughtErrorEvent, который содержит информацию о событии uncaughtError.

Параметры
type:String (default = NaN) — Тип события.
 
bubbles:Boolean (default = true) — Определяет, участвует ли объект Event в фазе восходящей цепочки потока событий. Прослушиватели событий могут получать эту информацию через унаследованное свойство bubbles.
 
cancelable:Boolean (default = true) — Определяет, можно ли отменить объект Event. Прослушиватели событий могут получать эту информацию через унаследованное свойство cancelable.
 
error_in:* (default = null) — Объект, связанный с неперехваченной или необработанной ошибкой (при нормальных обстоятельствах это объект Error или ErrorEvent).
Сведения о методе

clone

()метод
override public function clone():Event

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 10.1, AIR 2

Создает копию объекта UncaughtErrorEvent и задает значение каждого свойства, совпадающее с оригиналом.

Возвращает
Event — Новый объект UncaughtErrorEvent, значения свойств которого соответствуют значениям оригинала.

toString

()метод 
override public function toString():String

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 10.1, AIR 2

Возвращает строку, содержащую все свойства объекта UncaughtErrorEvent.

Возвращает
String — Возвращает строку, содержащую все свойства объекта UncaughtErrorEvent.
Сведения о константе

UNCAUGHT_ERROR

Константа
public static const UNCAUGHT_ERROR:String = "uncaughtError"

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 10.1, AIR 2

Определяет значение свойства type объекта события uncaughtError.

Примечание. Если в блоке try имеется диспетчер событий, который вызывает обработчик событий, блок catch не перехватывает ошибку, если ее выдает обработчик событий. Любую ошибку, выданную после этого момента, можно перехватить, прослушивая LoaderInfo.uncaughtErrorEvents.

Это событие имеет следующие свойства:

СвойствоЗначение
bubblestrue
cancelableимеет значение true; отмена события предотвращает появление диалогового окна о неперехваченной ошибке в отладочных версиях среды выполнения.
currentTargetОбъект, активно обрабатывающий объект Event с помощью прослушивателя событий.
errorНеперехваченная ошибка.
targetОбъект LoaderInfo, связанный с SWF-файлом, в котором возникла ошибка.
textТекстовое сообщение об ошибке.

UncaughtErrorEventExample.1.as

Следующий пример демонстрирует использование обработчика для обнаружения неперехваченных ошибок в проекте ActionScript. В примере определяется обработчик событий uncaughtError для обнаружения неперехваченных ошибок. В нем используется кнопка, при нажатии которой выдается ошибка, регистрируемая обработчиком неперехваченных ошибок.

В конструкторе код регистрирует прослушиватель события uncaughtError, отправляемого свойством uncaughtErrorEvents объекта LoaderInfo.

В методе uncaughtErrorHandler() код проверяет тип данных свойства error и реагирует соответствующим образом.

package
{
    import flash.display.Sprite;
    import flash.events.ErrorEvent;
    import flash.events.MouseEvent;
    import flash.events.UncaughtErrorEvent;

    public class UncaughtErrorEventExample extends Sprite
    {
        public function UncaughtErrorEventExample()
        {
            loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
            
            drawUI();
        }
        
        private function uncaughtErrorHandler(event:UncaughtErrorEvent):void
        {
            if (event.error is Error)
            {
                var error:Error = event.error as Error;
                // do something with the error
            }
            else if (event.error is ErrorEvent)
            {
                var errorEvent:ErrorEvent = event.error as ErrorEvent;
                // do something with the error
            }
            else
            {
                // a non-Error, non-ErrorEvent type was thrown and uncaught
            }
        }
        
        private function drawUI():void
        {
            var btn:Sprite = new Sprite();
            btn.graphics.clear();
            btn.graphics.beginFill(0xFFCC00);
            btn.graphics.drawRect(0, 0, 100, 50);
            btn.graphics.endFill();
            addChild(btn);
            btn.addEventListener(MouseEvent.CLICK, clickHandler);
        }
        
        private function clickHandler(event:MouseEvent):void
        {
            throw new Error("Gak!");
        }
    }
}
UncaughtErrorEventExample.1.5.as

Ниже приводится такой же пример для Flex, где в качестве корневого содержимого вместо класса ActionScript используется документ MXML.
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/halo"
                       applicationComplete="applicationCompleteHandler();">
    
    <fx:Script>
        <![CDATA[
            import flash.events.ErrorEvent;
            import flash.events.MouseEvent;
            import flash.events.UncaughtErrorEvent;
            
            private function applicationCompleteHandler():void
            {
                loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
            }
    
            private function uncaughtErrorHandler(event:UncaughtErrorEvent):void
            {
                if (event.error is Error)
                {
                    var error:Error = event.error as Error;
                    // do something with the error
                }
                else if (event.error is ErrorEvent)
                {
                    var errorEvent:ErrorEvent = event.error as ErrorEvent;
                    // do something with the error
                }
                else
                {
                    // a non-Error, non-ErrorEvent type was thrown and uncaught
                }
            }
            
            private function clickHandler(event:MouseEvent):void
            {
                throw new Error("Gak!");
            }
        ]]>
    </fx:Script>
      
    <s:Button label="Cause Error" click="clickHandler(event);"/>
</s:WindowedApplication>
UncaughtErrorEventExample.2.as

Следующий пример демонстрирует использование обработчика для обнаружения неперехваченных ошибок в загруженном SWF-файле. В примере определяется обработчик событий uncaughtError для обнаружения неперехваченных ошибок.

В конструкторе код создает объект Loader и регистрирует прослушиватель события uncaughtError, отправляемого свойством uncaughtErrorEvents объекта Loader.

В методе uncaughtErrorHandler() код проверяет тип данных свойства error и реагирует соответствующим образом.

package
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.ErrorEvent;
    import flash.events.UncaughtErrorEvent;
    import flash.net.URLRequest;

    public class LoaderUncaughtErrorEventExample extends Sprite
    {
        private var ldr:Loader;
        
        public function LoaderUncaughtErrorEventExample()
        {
            ldr = new Loader();
            ldr.load(new URLRequest("child.swf"));
            ldr.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
        }
        
        private function uncaughtErrorHandler(event:UncaughtErrorEvent):void
        {
            if (event.error is Error)
            {
                var error:Error = event.error as Error;
                // do something with the error
            }
            else if (event.error is ErrorEvent)
            {
                var errorEvent:ErrorEvent = event.error as ErrorEvent;
                // do something with the error
            }
            else
            {
                // a non-Error, non-ErrorEvent type was thrown and uncaught
            }
        }
    }
}




[ X ]Почему по-английски?
Содержимое Справочника ActionScript 3.0 отображается на английском языке

Не все части Справочника ActionScript 3.0 переводятся на все языки. Если какой-то текстовый элемент не переведен, он отображается на английском языке. Например, компонент ga.controls.HelpBox не переведен ни на один из языков. Это значит, что в русской версии справки компонент ga.controls.HelpBox будет отображаться на английском языке.