Ich möchte jeden undefinierten Funktionsfehler abfangen. Gibt es eine globale Fehlerbehandlungsfunktion in JavaScript? Der Anwendungsfall ist das Abfangen von Funktionsaufrufen von Flash, die nicht definiert sind.
javascript
dom-events
Brian Tompsett - 汤 莱恩
quelle
quelle
Antworten:
Hilft Ihnen das:
Ich bin mir nicht sicher, wie es mit Flash-Fehlern umgeht ...
Update: Es funktioniert nicht in Opera, aber ich hacke gerade Dragonfly, um zu sehen, was es bekommt. Der Vorschlag, Dragonfly zu hacken, ergab sich aus dieser Frage:
Mimic Window. Fehler in Opera mit Javascript
quelle
window.onerror = function() { alert(42) };
jetzt der Code in der Antwort:window.onerror = function() { alert("Error caught"); };
nicht überschreiben, ich bin immer noch unsicher ..So fangen Sie nicht behandelte Javascript-Fehler ab
Weisen Sie das
window.onerror
Ereignis einem Ereignishandler wie folgt zu:Wie im Code kommentiert, sollte der Browser das Anzeigen eines Warndialogs unterdrücken , wenn der Rückgabewert von
window.onerror
isttrue
.Wann wird das window.onerror-Ereignis ausgelöst?
Kurz gesagt, das Ereignis wird ausgelöst, wenn entweder 1.) eine nicht erfasste Ausnahme vorliegt oder 2.) ein Kompilierungszeitfehler auftritt.
Browser, die window.onerror unterstützen
Bildschirmfoto:
Beispiel für den obigen Fehlercode in Aktion, nachdem dieser zu einer Testseite hinzugefügt wurde:
Beispiel für die AJAX-Fehlerberichterstattung
JSFiddle:
https://jsfiddle.net/nzfvm44d/
Verweise:
quelle
throw
sie manuell erstellt wird. stackoverflow.com/questions/15036165/…ausgefeilte Fehlerbehandlung
Wenn Ihre Fehlerbehandlung sehr ausgefeilt ist und daher möglicherweise selbst einen Fehler auslöst, ist es hilfreich, ein Flag hinzuzufügen, das angibt, ob Sie sich bereits im "errorHandling-Modus" befinden. Wie so:
Andernfalls könnten Sie sich in einer Endlosschleife befinden.
quelle
handleError
Methode.Probieren Sie Atatus aus , das erweiterte Fehlerverfolgung und Überwachung realer Benutzer für moderne Webanwendungen bietet.
Lassen Sie mich erklären, wie Sie Stacktraces erhalten, die in allen Browsern einigermaßen vollständig sind.
Fehlerbehandlung in JavaScript
Modern Chrome und Opera unterstützen die HTML 5-Entwurfsspezifikation für ErrorEvent und vollständig
window.onerror
. In beiden Browsern können Siewindow.onerror
das Fehlerereignis entweder ordnungsgemäß verwenden oder ordnungsgemäß binden:Leider gibt es Firefox, Safari und IE immer noch und wir müssen sie auch unterstützen. Da der Stacktrace in nicht verfügbar ist, müssen
window.onerror
wir etwas mehr arbeiten.Es stellt sich heraus, dass das einzige, was wir tun können, um Stacktraces von Fehlern zu erhalten, darin besteht, unseren gesamten Code in einen
try{ }catch(e){ }
Block zu packen und dann zu betrachtene.stack
. Wir können den Prozess mit einer Funktion namens wrap etwas vereinfachen, die eine Funktion übernimmt und eine neue Funktion mit guter Fehlerbehandlung zurückgibt.Das funktioniert. Jede Funktion, die Sie manuell umbrechen, hat eine gute Fehlerbehandlung, aber es stellt sich heraus, dass wir sie in den meisten Fällen automatisch für Sie erledigen können.
Indem Sie die globale Definition von
addEventListener
so ändern , dass der Rückruf automatisch umbrochen wird, können wir dentry{ }catch(e){ }
größten Teil des Codes automatisch einfügen . Auf diese Weise kann vorhandener Code weiterarbeiten, es wird jedoch eine qualitativ hochwertige Ausnahmeverfolgung hinzugefügt.Wir müssen auch sicherstellen, dass
removeEventListener
das weiter funktioniert. Im Moment wird es nicht, weil das Argument zuaddEventListener
geändert wird. Wieder müssen wir dies nur amprototype
Objekt beheben :Übertragen Sie Fehlerdaten an Ihr Backend
Sie können Fehlerdaten mithilfe des Image-Tags wie folgt senden
Haftungsausschluss: Ich bin ein Webentwickler unter https://www.atatus.com/ .
quelle
http://yourserver.com
) schreiben , um es zu empfangen und zu speichern. Wenn Sie sich für atatus.com entscheiden , müssen Sie nichts tun. Fügen Sie Ihrer Seite einfach zwei Skriptzeilen hinzu.Es scheint, dass
window.onerror
dies nicht den Zugriff auf alle möglichen Fehler ermöglicht. Insbesondere ignoriert es:<img>
Ladefehler (Antwort> = 400).<script>
Ladefehler (Antwort> = 400).window.onerror
auf unbekannte Weise manipulieren (Abfrage, Winkel usw.).Hier ist der Beginn eines Skripts, das viele dieser Fehler abfängt, damit Sie Ihrer App während der Entwicklung ein robusteres Debugging hinzufügen können.
Es könnte so verwendet werden:
Das vollständige Skript verfügt über eine Standardimplementierung, die versucht, eine halb lesbare "Anzeige" -Version der empfangenen Entität / des empfangenen Fehlers auszudrucken. Kann als Inspiration für einen App-spezifischen Fehlerbehandler verwendet werden. Die Standardimplementierung enthält auch einen Verweis auf die letzten 100 Fehlerentitäten, sodass Sie sie in der Webkonsole überprüfen können, nachdem sie wie folgt aufgetreten sind:
Hinweis: Dies funktioniert durch Überschreiben von Methoden für mehrere Browser / native Konstruktoren. Dies kann unbeabsichtigte Nebenwirkungen haben. Es war jedoch nützlich, während der Entwicklung zu verwenden, um herauszufinden, wo Fehler auftreten, Protokolle an Dienste wie NewRelic oder Sentry während der Entwicklung zu senden, damit wir Fehler während der Entwicklung messen können, und beim Staging, um zu debuggen, was gerade passiert eine tiefere Ebene. Es kann dann in der Produktion ausgeschaltet werden.
Hoffe das hilft.
quelle
quelle
Man sollte auch den zuvor zugeordneten Fehlerrückruf beibehalten
quelle
Wenn Sie eine einheitliche Methode suchen, um sowohl nicht erfasste Fehler als auch nicht behandelte Ablehnungen von Versprechungen zu behandeln, können Sie sich die nicht erfasste Bibliothek ansehen .
BEARBEITEN
Es hört Fenster. unbehandelte Ablehnung zusätzlich zu window.onerror.
quelle
Ich würde empfehlen, Trackjs auszuprobieren.
Es ist eine Fehlerprotokollierung als Dienst.
Es ist erstaunlich einfach einzurichten. Fügen Sie einfach eine <script> -Zeile zu jeder Seite hinzu und fertig. Dies bedeutet auch, dass es erstaunlich einfach zu entfernen ist, wenn Sie entscheiden, dass es Ihnen nicht gefällt.
Es gibt andere Dienste wie Sentry (Open Source, wenn Sie Ihren eigenen Server hosten können), aber es macht nicht das, was Trackjs macht. Trackjs zeichnet die Interaktion des Benutzers zwischen seinem Browser und Ihrem Webserver auf, sodass Sie die Benutzerschritte, die zu dem Fehler geführt haben, tatsächlich verfolgen können, anstatt nur eine Datei- und Zeilennummernreferenz (und möglicherweise eine Stapelverfolgung).
quelle
Sie hören das Ereignis onerror ab, indem Sie window.onerror eine Funktion zuweisen:
quelle