Paquete | flash.events |
Clase | public class UncaughtErrorEvent |
Herencia | UncaughtErrorEvent ErrorEvent TextEvent Event Object |
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10.1, AIR 2 |
try..catch
o cuando un objeto ErrorEvent se distribuye sin ningún detector registrado. La funcionalidad de eventos de error sin capturar suele describirse como un “controlador de errores global”.
El objeto UncaughtErrorEvents que distribuye el evento está asociado con un objeto LoaderInfo o un objeto Loader. Utilice las siguientes propiedades para tener acceso a una instancia de UncaughtErrorEvents:
-
LoaderInfo.uncaughtErrorEvents
: para detectar errores sin capturar en el código definido en el mismo SWF. -
Loader.uncaughtErrorEvents
: para detectar errores sin capturar en el código definido en el SWF cargado por un objeto Loader.
Cuando se produce un evento uncaughtError
, incluso si el evento se gestiona, la ejecución no seguirá en el apilamiento de llamadas que provocó el error. Si el error es un error sincrónico, cualquier código que quede en la función en la que se ha producido el error no se ejecuta. Por lo tanto, es probable que cuando se produce un evento de error sin capturar, la aplicación se encuentra en un estado inestable. Ya que puede haber muchas causas para un error sin capturar, es imposible predecir qué funcionalidad está disponible. Por ejemplo, la aplicación puede ser capaz de ejecutar operaciones de red u operaciones de archivos. Sin embargo, dichas operaciones no están necesariamente disponibles.
Cuando un SWF carga otro, los eventos uncaughtError
se propagan hacia abajo y hacia arriba otra vez a través de la jerarquía LoaderInfo. Por ejemplo, supongamos que A.swf carga B.swf utilizando una instancia de Loader. Si se produce un error sin capturar en B.swf, se distribuye un evento uncaughtError
a los objetos LoaderInfo y Loader en la siguiente secuencia:
- (Fase de captura) LoaderInfo de A.swf
- (Fase de captura) Loader en A.swf
- (Fase de destino) LoaderInfo de B.swf
- (Fase de propagación) Loader en A.swf
- (Fase de propagación) KoaderInfo de A.swf
Una propiedad uncaughtErrorEvents
del objeto Loader nunca distribuye un evento uncaughtErrorEvent
en la fase de destino. Sólo distribuye el evento en las fases de captura y propagación.
Al igual que ocurre con otras propagaciones de eventos, la llamada a stopPropagation()
o stopImmediatePropagation()
detiene la distribución del evento a todos otros detectores, con una diferencia importante. Un objeto UncaughtErrorEvents del objeto Loader se trata como un par con el objeto LoaderInfo.uncaughtErrorEvents
del archivo SWF cargado para fines de propagación de eventos. Si un detector registrado con uno de esos objetos llama al método stopPropagation()
, los eventos se siguen distribuyendo a otros detectores registrados con ese objeto UncaughtErrorEvents y para detectores registrados con su socio UncaughtErrorEvents antes de finalizar la propagación. El método stopImmediatePropagation()
sí impide que los eventos se distribuyan a todos los detectores adicionales.
Cuando el contenido se ejecuta en una versión de depurador del motor de ejecución, como la versión de depurador de Flash Player o AIR Debug Launcher (ADL), aparece un diálogo de error sin capturar cuando se produce un error sin capturar. Para esas versiones del motor de ejecución, el diálogo de error aparece incluso cuando hay un detector registrado para el evento uncaughtError
. Para evitar que el diálogo aparezca en este caso, llame al método preventDefault()
, del objeto UncaughtErrorEvent.
Si el contenido cargado por el objeto Loader es un archivo SWF AVM1 (ActionScript 2), los errores no detectados en el archivo SWF AVM1 no producen un evento uncaughtError
. Además, los errores de JavaScript en contenido HTML cargado en un objeto HTMLLoader (incluido el control HTML de Flex) no producen un evento uncaughtError
.
Elementos de API relacionados
Propiedad | Definido por | ||
---|---|---|---|
bubbles : Boolean [solo lectura]
Indica si un evento es un evento de propagación. | Event | ||
cancelable : Boolean [solo lectura]
Indica si se puede evitar el comportamiento asociado al evento. | Event | ||
constructor : Object
Una referencia a la clase de objeto o función constructora para una instancia de objeto determinada. | Object | ||
currentTarget : Object [solo lectura]
Objeto que procesa de forma activa el objeto de evento con un detector de eventos. | Event | ||
error : * [solo lectura]
El objeto de error asociado al error sin capturar. | UncaughtErrorEvent | ||
errorID : int [solo lectura]
Contiene el número de referencia asociado al error concreto. | ErrorEvent | ||
eventPhase : uint [solo lectura]
La fase actual en el flujo del evento. | Event | ||
target : Object [solo lectura]
El destino del evento. | Event | ||
text : String
Para un evento textInput, el carácter o la secuencia de caracteres introducidos por el usuario. | TextEvent | ||
type : String [solo lectura]
El tipo de evento. | Event |
Método | Definido por | ||
---|---|---|---|
UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)
Crea un objeto UncaughtErrorEvent que contiene información sobre un evento uncaughtError. | UncaughtErrorEvent | ||
[override]
Crea una copia del objeto UncaughtErrorEvent y define el valor de cada propiedad para que coincida con el del objeto original. | UncaughtErrorEvent | ||
Una función de utilidad para implementar el método toString() en las clases Event personalizadas de ActionScript 3.0. | Event | ||
Indica si un objeto tiene definida una propiedad especificada. | Object | ||
Comprueba si se ha llamado a preventDefault() en el evento. | Event | ||
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro. | Object | ||
Cancela el comportamiento predeterminado de un evento si es posible cancelarlo. | Event | ||
Indica si existe la propiedad especificada y si es enumerable. | Object | ||
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle. | Object | ||
Impide el proceso de cualquier detector de eventos en el nodo actual y los nodos siguientes en el flujo del evento. | Event | ||
Impide el proceso de cualquier detector de eventos en nodos siguientes al nodo actual. | Event | ||
Devuelve la representación de cadena de este objeto, con formato según las convenciones específicas de configuración regional. | Object | ||
[override]
Devuelve una cadena con todas las propiedades del objeto UncaughtErrorEvent. | UncaughtErrorEvent | ||
Devuelve el valor simple del objeto especificado. | Object |
Constante | Definido por | ||
---|---|---|---|
UNCAUGHT_ERROR : String = "uncaughtError" [estática]
Define el valor de la propiedad type para un objeto de evento UncaughtErrorEvent. | UncaughtErrorEvent |
error | propiedad |
error:*
[solo lectura] Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10.1, AIR 2 |
El objeto de error asociado al error sin capturar. Normalmente, este tipo de datos de objeto es uno de los siguientes:
- Una instancia de Error (o una de sus subclases), si el error sin capturar es un error sincrónico creado por una sentencia
throw
, como un error que podría haber capturado utilizando un bloquetry..catch
- Una instancia de ErrorEvent (o una de sus subclases), si el error sin capturar es un error asíncrono que distribuye un evento de error cuando se produce el error
Sin embargo, la propiedad error
puede ser un objeto de cualquier tipo de datos. ActionScript no requiere una sentencia throw
para utilizarse sólo con objetos Error. Por ejemplo, el código siguiente es válido tanto en tiempo de compilación como en tiempo de ejecución:
throw new Sprite()
Si esa sentencia throw
no se detecta con un bloque try..catch
, la sentencia throw
activa un evento uncaughtError
. En ese caso, la propiedad error
del objeto UncaughtErrorEvent que se distribuye es el objeto Sprite construido en la sentencia throw
.
En consecuencia, en su detector uncaughtError
, debe comprobar el tipo de datos de la propiedad error
. En el siguiente ejemplo se demuestra esta técnica:
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(); } }
Si la propiedad error
contiene una instancia de Error (o subclase de Error), la información disponible sobre el error variará en función de la versión del motor de ejecución en que se esté ejecutando el contenido, del modo siguiente:
En una versión de depurador del motor de ejecución, por ejemplo, la versión de depuración de Flash Player o AIR Debug Launcher (ADL):
- El método
Error.getStackTrace()
devuelve la pila de llamadas que llevó al error. Error.message
contiene el texto completo del mensaje de error
- El método
En una versión del motor de ejecución sin depurador:
- El método
Error.getStackTrace()
devuelve la pila de llamadas que llevó al error. Sin embargo, la información de pila de llamadas no incluye los nombres de archivo de origen ni los números de línea. - La propiedad
Error.message
contiene una versión corta del mensaje de error, que suele ser una combinación de las propiedadeserror.errorID
yError.name
- El método
En una versión de del motor de ejecución sin depurador (Flash Player 11.4 o versiones anteriores, y en AIR 1.4 o versiones anteriores):
- El método
Error.getStackTrace()
devuelvenull
- La propiedad
Error.message
contiene una versión corta del mensaje de error, que suele ser una combinación de las propiedadeserror.errorID
yError.name
- El método
Todas las demás propiedades y métodos de la clase Error están disponibles en todas las versiones del motor de ejecución.
Tenga en cuenta que si la propiedad error
es una instancia de ErrorEvent, la información de la pila de llamadas nunca está disponible.
Implementación
public function get error():*
UncaughtErrorEvent | () | Información sobre |
public function UncaughtErrorEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = true, error_in:* = null)
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10.1, AIR 2 |
Crea un objeto UncaughtErrorEvent que contiene información sobre un evento uncaughtError
.
type:String (default = NaN ) — El tipo de evento.
| |
bubbles:Boolean (default = true ) — Determina si el objeto de evento participa en la fase de propagación del flujo del evento. Los detectores de eventos pueden acceder a esta información a través de la propiedad bubbles heredada.
| |
cancelable:Boolean (default = true ) — Determina si se puede cancelar el objeto Event. Los detectores de eventos pueden acceder a esta información a través de la propiedad cancelable heredada.
| |
error_in:* (default = null ) — El objeto asociado al error que no se ha capturado o gestionado (un objeto Error o ErrorEvent en circunstancias normales).
|
clone | () | método |
override public function clone():Event
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10.1, AIR 2 |
Crea una copia del objeto UncaughtErrorEvent y define el valor de cada propiedad para que coincida con el del objeto original.
Valor devueltoEvent — Un nuevo objeto UncaughtErrorEvent con valores de propiedades que coinciden con los del objeto original.
|
toString | () | método |
override public function toString():String
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10.1, AIR 2 |
Devuelve una cadena con todas las propiedades del objeto UncaughtErrorEvent.
Valor devueltoString — Una cadena que contiene todas las propiedades del objeto UncaughtErrorEvent.
|
UNCAUGHT_ERROR | Constante |
public static const UNCAUGHT_ERROR:String = "uncaughtError"
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10.1, AIR 2 |
Define el valor de la propiedad type
de un objeto de evento uncaughtError
Nota: Si en un bloque try hay un distribuidor de eventos que llama al controlador de eventos, el bloque catch no detecta el error si se inicia en el controlador de eventos. Cualquier error generado a partir de ese momento se puede detectar mediante LoaderInfo.uncaughtErrorEvents
Este evento tiene las propiedades siguientes:
Propiedad | Valor |
---|---|
bubbles | true |
cancelable | true ; cancelar el evento impide que aparezca el diálogo de error sin capturar en las versiones de depurador del motor de ejecución |
currentTarget | Objeto que procesa de forma activa el objeto de evento con un detector de eventos. |
error | El error sin capturar. |
target | El objeto LoaderInfo asociado al archivo SWF donde se ha producido el error. |
text | Mensaje de error de texto. |
uncaughtError
para detectar errores sin capturar. También proporciona un botón que, cuando se hace clic, emite un error recogido por el controlador de errores sin capturar.
En el constructor, el código registra un detector para el evento uncaughtError
distribuido por la propiedad uncaughtErrorEvents
del objeto LoaderInfo.
En el método uncaughtErrorHandler()
, el código comprueba el tipo de datos de la propiedad error
y responde en consecuencia.
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
para detectar errores sin capturar.
En el constructor, el código crea un objeto Loader y registra un detector para el evento uncaughtError
distribuido por la propiedad uncaughtErrorEvents
del objeto Loader.
En el método uncaughtErrorHandler()
, el código comprueba el tipo de datos de la propiedad error
y responde en consecuencia.
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, 02:12 PM Z