Пакет | flash.events |
Класс | public class UncaughtErrorEvent |
Наследование | UncaughtErrorEvent ErrorEvent TextEvent Event Object |
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
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 в следующей последовательности:
- (Фаза захвата) объект LoaderInfo файла A.swf
- (Фаза захвата) объект Loader в файле A.swf
- (Фаза цели) объект LoaderInfo файла B.swf
- (Фаза восходящей цепочки) Loader в файле A.swf
- (Фаза восходящей цепочки) объект 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
Свойство | Определено | ||
---|---|---|---|
bubbles : Boolean [только для чтения]
Определяет, является ли событие событием восходящей цепочки. | Event | ||
cancelable : Boolean [только для чтения]
Указывает, можно ли предотвратить поведение, связанное с событием. | Event | ||
constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | ||
currentTarget : Object [только для чтения]
Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. | Event | ||
error : * [только для чтения]
Объект ошибки, связанный с неперехваченной ошибкой. | UncaughtErrorEvent | ||
errorID : int [только для чтения]
Содержит ссылочный номер, связанный с конкретной ошибкой. | ErrorEvent | ||
eventPhase : uint [только для чтения]
Текущая фаза в потоке событий. | Event | ||
target : Object [только для чтения]
Целевой объект события. | Event | ||
text : String
Для события textInput — введенный пользователем знак или последовательность знаков. | TextEvent | ||
type : String [только для чтения]
Тип события. | Event |
Метод | Определено | ||
---|---|---|---|
UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)
Создает объект UncaughtErrorEvent, который содержит информацию о событии uncaughtError. | UncaughtErrorEvent | ||
[переопределить]
Создает копию объекта UncaughtErrorEvent и задает значение каждого свойства, совпадающее с оригиналом. | UncaughtErrorEvent | ||
Служебная функция для реализации метода toString() в пользовательских классах ActionScript 3.0 Event. | Event | ||
Показывает, определено ли заданное свойство для объекта. | Object | ||
Проверяет, выполнялся ли для события вызова метода preventDefault(). | Event | ||
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | ||
Отменяет поведение по умолчанию для события, если такое поведение можно отменить. | Event | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
Отменяет обработку прослушивателей событий в текущем узле, а также во всех узлах, которые следуют в потоке событий за текущим узлом. | Event | ||
Отменяет обработку прослушивателей событий в узлах, которые следуют в потоке событий за текущим узлом. | Event | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
[переопределить]
Возвращает строку, содержащую все свойства объекта UncaughtErrorEvent. | UncaughtErrorEvent | ||
Возвращает элементарное значение заданного объекта. | 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 | () | метод |
UNCAUGHT_ERROR | Константа |
public static const UNCAUGHT_ERROR:String = "uncaughtError"
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Определяет значение свойства type
объекта события uncaughtError
.
Примечание. Если в блоке try имеется диспетчер событий, который вызывает обработчик событий, блок catch не перехватывает ошибку, если ее выдает обработчик событий. Любую ошибку, выданную после этого момента, можно перехватить, прослушивая LoaderInfo.uncaughtErrorEvents
.
Это событие имеет следующие свойства:
Свойство | Значение |
---|---|
bubbles | true |
cancelable | имеет значение true ; отмена события предотвращает появление диалогового окна о неперехваченной ошибке в отладочных версиях среды выполнения. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
error | Неперехваченная ошибка. |
target | Объект LoaderInfo, связанный с SWF-файлом, в котором возникла ошибка. |
text | Текстовое сообщение об ошибке. |
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!"); } } }
<?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>
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 } } } }
Tue Jun 12 2018, 11:34 AM Z