SELFHTML: JavaScript / Anwendungsbeispiele / Fehlerbehandlung mit dem Event-Handler onerror
Author: Redaktion SELFHTML, selfhtml81@selfhtml.org
Description: Wie Sie Fehler in JavaScriptprogrammen abfangen können.
Keywords: SELFHTML, JavaScript, Fehler, Error, onerror
Date: 2005-08-22T21:21:39+02:00

| # Fehlerbehandlung mit dem Event-Handler onerror
| Hinweise zu diesen Beispielen Quelltext mit Erläuterungen Anzeigebeispiel: So sieht's aus

## Hinweise zu diesem Beispiel

Der Sprachumfang von JavaScript erlaubt es mittlerweile, umfangreiche Anwendungen zu erstellen. Dynamische Web-Seiten enthalten teilweise umfangreiche Scripts, die in ihren Abläufen auf etliche Variablen zurückgreifen. Dabei können sich sich leicht unkontrollierbare Werte und Zustände im Programmablauf einschleichen, zum Beispiel auch durch nicht einkalkuliertes Anwenderverhalten. Seit der JavaScript-Version 1.1 steht Ihnen mit dem Event-Handler `onerror` ein Werkzeug zur zur Verfügung, um innerhalb des Scripts Fehler abzufangen und gezielt darauf zu reagieren.

Zur Unterdrückung von Fehlermeldungen, die zur Laufzeit eines Scripts entstehen, notieren Sie im Kopf der Datei `window.onerror`. Als Wert weisen Sie den Namen einer Funktion zu, welche die Fehlerbehandlung ausführt. Der Rückgabewert der Funktion muss `true` sein. Damit haben Sie Ihre eigene Fehlerbehandlung.

Der Fehlerbehandlungs-Funktion können Sie bis zu 3 optionale Parameter übergeben:
1. Nachricht: enthält die Fehlerbeschreibung des Fehlers
2. Datei: enthält den URI der fehlerverursachenden Datei
3. Zeile: enthält die Zeile in der der Fehler auftritt

Diese Art der Fehlerkontrolle können Sie für Netscape 4.x und Internet Explorer ab Version 4.x verwenden. Netscape 6 ist nicht in der Lage, die Parameter vollständig zu interpretieren. Er speichert jeweils im ersten Parameter das auslösende Eventobjekt. Opera interpretiert den an das Fensterobjekt gebundenen Event-Handler `window.onerror` nicht.

Berücksichtigen Sie, dass Sie nur logische Fehler überwachen und unterdrücken können, die während der Laufzeit der Scripts entstehen. Syntaxfehler, wie z.B. fehlende Klammern usw. sind damit nicht abfangbar.

## Quelltext mit Erläuterungen

Das Beispiel zeigt eine einfach Variante der Fehlerbehandlung. Am Ende des Script-Bereichs wird eine Funktion aufgerufen, die nicht existiert.

### Beispiel:

Anzeigebeispiel: So sieht's aus

    <html><head><title>Test</title>
    <script type="text/javascript">
    window.onerror = Fehlerbehandlung;

    function Fehlerbehandlung (Nachricht, Datei, Zeile) {
      Fehler = "Fehlermeldung:\n" + Nachricht + "\n" + Datei + "\n" + Zeile;
      zeigeFehler();
      return true;
    }

    function zeigeFehler () {
      alert(Fehler);
    }

    nichtda();
    </script>
    </head><body>
    <a href="javascript:zeigeFehler()">Fehler</a><br>
    </body></html>

### Erläuterung:

Beim Einlesen der Datei wird mit `window.onerror = Fehlerbehandlung` angewiesen, im Fehlerfall die Funktion `Fehlerbehandlung()` aufzurufen. Dieses Ereignis tritt im Beispiel am Ende des Script-Bereichs ein, wo versucht wird, die nichtvorhandene Funktion `nichtda()` aufzurufen.

#### Die Funktion Fehlerbehandlung()

Die Funktion speichert mit Zeichenkettenverknüpfung die automatisch übergebenen Parameter in der Variablen `Fehler`. Dann ruft sie im Beispiel die Funktion `zeigeFehler()` auf. Diese Funktion dient im Beispiel lediglich dazu, den Fehler zu Demonstrationszwecken auszugeben. Mit `return true` wird erreicht, dass der Fehler im Browser nicht angezeigt wird. Mit dem Rückgabewert `false` würden Sie bewirken, dass der Browser den Fehler anmeckern würde.

In einer komplexeren Anwendung hätte die Funktion `Fehlerbehandlung()` also alle Möglichkeiten, auf den Fehler zu reagieren. Sie könnte beispielsweise die Zeichenkette des übergebenen Parameters `Nachricht` untersuchen, um herauszufinden, welcher Fehler genau aufgetreten ist. Je nach Situation könnte eine solche Funktion bewirken, dass das Script zu einem früheren Punkt im Programmablauf zurückspringt, Variablen zurücksetzt, den Cursor in ein bestimmtes Formularfeld setzt usw.

| Fehlerbehandlung mit dem try..catch-Statement
| Verweisliste als Auswahlliste

© 2007 Impressum