Hier im Forum bekommt ihr bei euren fragen schnelle hilfe.Hier geht es rund um das Web SeitenProgrammieren.Alles rund ums Javascript,Html,Php,Css und Sql.Auf fast allen Fragen haben wir eine Antwort.
Der Soforthilfe-chat verspricht das ,was sein Name sagt. Hier sind Leute Online die sofort ihre hilfe anbieten.Seht in der OnlineListe nach und wenn einer Online ist werdet ihr auch antwort bekommen. Admine ,Moderatoren und Helfer sind unsere Spezialisten in Sachen Web Programierung
71 Unwetterwarnungen in Deutschland
Die Datenbank wurde zuletzt am 02.08.2020 17:34:28 aktualiesiert
71

Javascript Error-Handling

In PHP ist ja so ziemlich alles erforscht, wie man mit Exceptions und Errors umzugehen hat. In Javascript wird das Thema aber sehr stiefmütterlich behandelt. Hier mal ein Ansatz, um JS-Fehler effektiv tracken und loggen zu können.

E.js

var E = {     //true: errors via alert / false: errors are being logged     debugMode:false,      //processes errors     handle: function(sev,msg)     {         if (E.debugMode) {             alert("Error ("+sev+") with message: " + msg);         } else {             var img=new Image();             img.src="errorlogger.php?sev="+encodeURIComponent(sev)+                          "&msg="+encodeURIComponent(msg)+                          "&url="+encodeURIComponent(document.URL);         }     } }  //error has not been caught and forwarded to "errorhandler" manually -> windowerror window.onerror=function(msg,url,line) {     E.handle(1,'Uncaught error:'+msg+" in "+url+", line "+line);     return true; //continue } 

In dieser Javascript-Datei geht die eigentliche Magie ab. Mittels des debugMode wird bestimmt, ob der Fehler ausgegeben oder geloggt wird. Im „Log“-Fall wird ein Image erzeugt (was natürlich nicht sichtbar ist), das die URL der Errorlog-Datei hat. Sollte ein Fehler auftreten (window.error), so wird dieser an den Errorhandler weitergereicht.

errorlogger.php

<?php 	error_log(date("d.m.Y H:i:s")." (JS) -> ".$_GET['msg']." (Severity: ".$_GET['sev']."): ".$_GET['url']."\n",3,"error.log"); ?> 

Ultrasimpel. Die übergebenen Log-Parameter werden per error_log an eine Datei error.log appended. Wichtig: Per htaccess / httpd.conf den Aufruf der errorlog-Datei per Web verbieten.

Einbindung im HTML

<!DOCTYPE html> <html> 	<head> 		<meta charset="UTF-8" /> 		<script src="e.js"></script>         <script>         function divide(d1,d2) {             if (d2==0) {                 throw new Error("Div by 0 is illegal.");             }             return d1/d2;         }          try {             divide(3,0);         } catch (ex) {             E.handle(1,ex);         }          //does not exist -> window.error         xyz(); 	</script> 	</head> 	<body>  	</body> </html> 

So könnte das dann aussehen. in der divide-Funktion wird ein Error geworfen, der dann im try/catch Block aufgefangen und an den Errorhandler weitergegeben wird. Beim Aufruf von xyz() springt die window.onerror Funktion ein und bringt darüber auch wieder den Errorhandler ins Spiel.

Die Errorlog-Datei sieht nach Aufruf des obigen HTMLs im Browser dann so aus:

js-errorlog

js-errorlog