Ich versuche, eine Möglichkeit zu finden oder herauszufinden, wie alle nicht behandelten Javascript-Ausnahmen in einer Anwendung in einem Warnfeld angezeigt werden können. Ich möchte, dass dies alles auf der Clientseite erfolgt, ohne dass serverseitiger Code verwendet wird. Ich verwende MVC3 als Umgebung.
Ich habe in den letzten Tagen recherchiert und nicht genau das gefunden, wonach ich suche.
Ich habe unten zwei Möglichkeiten gefunden, die fast das sind, wonach ich suche, außer dass diese Möglichkeiten so eingerichtet sind, dass Sie einen Funktionsnamen an eine benutzerdefinierte Methode übergeben müssen, um die Stapelverfolgung aller nicht behandelten Ausnahmen innerhalb dieser zu drucken spezifische Funktion. Ich suche nach einer Möglichkeit, einen Funktionsnamen nicht manuell an eine benutzerdefinierte Methode übergeben zu müssen, die den Stack-Trace aller nicht behandelten Ausnahmen druckt. Ich möchte, dass diese benutzerdefinierte Methode nur auf alle nicht behandelten Ausnahmen in der gesamten Anwendung wartet.
http://eriwen.com/javascript/js-stack-trace/
Auch etwas ähnliches wie der vorherige Link:
https://github.com/eriwen/javascript-stacktrace
Hier ist der Basiscode aus dem zweiten Link oben, der den Stack-Trace einer angegebenen Javascript-Funktion druckt:
instrumentFunction: function (context, functionName, callback) {
context = context || window;
var original = context[functionName];
context[functionName] = function instrumented() {
callback.call(this, printStackTrace().slice(4));
return context[functionName]._instrumented.apply(this, arguments);
};
context[functionName]._instrumented = original;
}
function printStackTrace(options) {
options = options || {
guess: true
};
var ex = options.e || null,
guess = !! options.guess;
var p = new printStackTrace.implementation(),
result = p.run(ex);
return (guess) ? p.guessAnonymousFunctions(result) : result;
}
Also, um das zusammenzufassen, kennen Sie alle eine Möglichkeit, eine Art "Listener" zu haben, der auf alle nicht behandelten Ausnahmen von Javascript wartet und sie dann in einem Warnfeld auf den Bildschirm druckt?
Vielen Dank! Jason
quelle
Antworten:
Sie können dies mithilfe der window.onerror-Methode tun.
quelle
Sie können
window.onerror
das Ereignis 'error' entweder verwenden oder (erstaunlicherweise!) Richtig binden:Wenn Sie JavaScript-Fehler verfolgen möchten, können Sie Atatus ausprobieren . Ich arbeite bei Atatus.
quelle
Zusätzlich zu
Sie können auch alle Fehler abfangen, die in einem versprochenen Rückruf (
.then()
) ausgelöst wurden, der auf einunhandledrejection
Ereignis wartetquelle
window.onerror
undwindow.addEventListener("error"
, oder unter Verwendung einer von ihnen ausreichend?window.addEventListener("error"
, senden SieuseCapture
set totrue
, um auch Elementfehler zu erfassen, die nicht in die Luft gesprudelt sind. developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/…error
Ereignis hat meinen speziellen Fehler nicht erfasst.unhandledrejection
habe es aber verstanden.throw new Error('tja');
wird bei diesem Ansatz nicht im neuesten Chrom gefangen ...Schauen Sie sich http://log4javascript.org an, es basiert auf Log4J. Wenn der größte Teil Ihres Codes in try / catch-Anweisungen eingeschlossen ist, um Ausnahmen zu behandeln, können Sie diese Bibliothek als allgemeine Schnittstelle zum Senden von Ausgaben an ein immer verfügbares "Dialogfeld" oder Protokollierungsfenster verwenden, das Ihr Endbenutzer sehen kann. Sie könnten sogar eine Schaltfläche haben, die eine window.print () ausführt, um den Inhalt des Dialogfelds auf dem Drucker oder als PDF zu drucken. Viel Glück.
quelle