(JavaScript) Fehlermeldungen unterdrücken

Problematik

Viele Websites verwenden nicht nur eigenen JavaScript-Code, sondern auch JavaScript-Code von Drittanbietern. Der urchin-Tracker von Google Analytics ist nur eines der bekanntesten Beispiele dafür. Unzählige Services für Counter, Vorschau-Screenshots bei Links, Werbebanner, eingebettete Newsfeeds und eigentlich alle sogenannten Widgets bieten JavaScripts an, die auf eigenen Webseiten einfach durch Notationen wie <script type="text/javascript" src="http://fremde-adresse.xy/script.js"></script> eingebunden werden. Das ist sehr praktisch, birgt aber das Problem, dass man als Anbieter nicht mehr die Kontrolle über den gesamten, im Zusammenhang mit der Webseite ausgelieferten Code hat. Zu den möglichen Übeln gehört jenes, dass der fremde JavaScript-Code Fehler produzieren kann, die im Browser des Anwenders als Scriptfehler auf der enthaltenden Seite angezeigt werden. Um das zu verhindern, kann man alle JavaScript-Fehlermeldungen mit der hier vorgestellten Funktion unterdrücken.

Code

<script type="text/javascript"> 
function blockError() {
  return true;
}
window.onerror = blockError;
</script>

Erläuterung

Notieren Sie das Script beispielsweise im Kopf eines HTML-Dokuments, also zwischen <head> und </head>. Das Script besteht aus einer Funktion namens blockError(), die nichts weiter tut, als true zurückzugeben, sowie aus einer Anweisung. Die Anweisung initiiert den Event-Handler onerror für das window-Objekt. Dem Event-Handler wird der Aufruf der Funktion blockError zugeordnet (wichtig: in diesem Fall keine runden Klammern hinter dem Funktionsnamen notieren!) Das führt dazu, dass alle auftretenden JavaScript-Fehler an die angegebene Funktion geleitet werden. Da unsere Funktion jedoch nichts weiter tut als true zurückzugeben, wird die Fehlermeldung letztlich unterdrückt.

Der Fehler selbst wird dadurch natürlich nicht ausgebügelt, und Abbruch oder Fehlverhalten eines Scripts infolge des Fehlers ebenfalls nicht.

page_revision: 2, last_edited: 1218136877|%e %b %Y, %H:%M %Z (%O ago)