Flash Player 10.1, der heute in der zweiten Betaversion erschienen ist, führt das Global Error Handling ein. Es besteht die Möglichkeit, alle möglicherweise auftretenden Fehler-Events, die nicht behandelt werden, mit einer einzigen Routine abzufangen. Dies bringt den Vorteil, dass problemlos alle Fehler erfasst und protokolliert werden können. Da dies auch mit dem Release Flash Player funktionieren soll, können auch Fehler beim Nutzer im laufenden Betrieb erkannt werden.

UncaughtErrorEvent

Neu ist das UncaughtErrorEvent. Durch Registrierung eines Eventhandlers für das Event UncaughtErrorEvent.UNCAUGHT_ERROR können alle nicht abgefangenen Events verarbeitet werden. Das UncaughtErrorEvent wird entweder mit einem Loaderinfo oder einem Loader verknüpft.

LoaderInfo.uncaughtErrorEvents: to detect uncaught errors in code defined in the same SWF.
Loader.uncaughtErrorEvents: to detect uncaught errors in code defined in the SWF loaded by a Loader object.

Popups beim Debug Player unterdrücken

Wenn ein Flashfile mit der Debug-Version des Flash Player ausgeführt wird, taucht bei einem Fehler das oftmals lästige Popup auf. Dieses kann nun mit der Methode preventDefault() verhindert werden.

Beispiel für Global Error Handling

Um das Beispiel zu betrachten, benötigt man den Flash Player 10.1 in der neusten Version. Es wird versucht, ein File zu laden, das nicht existiert. Der Fehler wird abgefangen und in einer Alert-Box angezeigt.

Hier der passende Quellcode dazu.

XML:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
  3.                xmlns:s="library://ns.adobe.com/flex/spark"
  4.                xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768"
  5.                applicationComplete="init()"
  6.                backgroundColor="0xe01622"
  7.               >
  8.  
  9.     <fx:Script>
  10.         <![CDATA[
  11.             import mx.controls.Alert;
  12.            
  13.             private function init():void {
  14.                 loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onGlobalError);
  15.             }
  16.            
  17.             private function triggerError():void {
  18.                 var myRequest:URLRequest = new URLRequest("unknown-file.txt");
  19.                 var myURLLoader:URLLoader = new URLLoader();
  20.                 myURLLoader.load(myRequest);   
  21.             }
  22.  
  23.             private function onGlobalError(evt:UncaughtErrorEvent):void {
  24.                 // Popup verhindern
  25.                 evt.preventDefault();
  26.                
  27.                 Alert.show ("Es ist ein Fehler aufgetreten: " + evt.error.toString());
  28.    
  29.             }
  30.  
  31.         ]]>
  32.     </fx:Script>
  33.    
  34.     <s:Button label="Laden" click="triggerError()" x="20" y="20" />
  35. </s:Application>

Link: UncaughtErrorEvent (Flash Doku)
Link: Flash Player 10.1 Beta