Frage

Ich bin auf der Suche JavaScript-Ausnahmen zu protokollieren nicht behandelte. Gibt es ein Ereignis, das ausgelöst wird, wenn eine Ausnahme nicht abgefangen wird? Ich suche die Ausnahmen zu fangen, bevor sie JavaScript-Fehler im Browser verursachen, aber ich möchte lieber nicht innerhalb eines Try / Catch meine gesamte Anwendung. Jede Hilfe wäre sehr geschätzt. Dank!

Update: tvanfosson wies onerror als Möglichkeit aus. Es ist nicht Teil einer Spezifikation und ist nur in IE oder Gecko-basierten Browsern zur Verfügung.

Für weitere Informationen - http://books.google.com/books?id=tKszhx-XkzYC&pg=PA386&lpg=PA386&dq=safari+onerror+javascript&source=web&ots=gQaGbpUnjG&sig=iBCtOQs0aH_EAzSbWlGa9v5flyo#PPA387,M1

OnError Unterstützung Tabelle - http://www.quirksmode.org/dom/events/ error.html

Mozilla Dokumentation - https://developer.mozilla.org/en/DOM/window .onerror

WebKit Bug Report - https://bugs.webkit.org/show_bug.cgi? id = 8519

War es hilfreich?

Lösung

Versuchen Sie, einen onerror Handler. Docs von MDN. Dies ermöglicht es Ihnen, etwas zu tun, wenn ein Fehler erkannt wird, aber wahrscheinlich werden Sie nicht in einer anmutigen Art und Weise fortsetzen lassen, dass ein try / catch-Block würde. Beachten Sie, dass es zweifellos Unterschiede zwischen den Browsern, wie dies gehandhabt wird.

Andere Tipps

Sehen Sie sich diese Fiddle:

http://jsfiddle.net/xYsRA/1/

window.onerror = function (msg, url, line) {
    console.log("Caught[via window.onerror]: '" + msg + "' from " + url + ":" + line);
    return true; // same as preventDefault
};

window.addEventListener('error', function (evt) {
    console.log("Caught[via 'error' event]:  '" + evt.message + "' from " + evt.filename + ":" + evt.lineno);
    console.log(evt); // has srcElement / target / etc
    evt.preventDefault();
});


throw new Error("Hewwo world.  I crash you!!!");

throw new Error("Hewwo world.  I can only crash you once... :(");

Welche druckt:

Caught[via window.onerror]: 'Uncaught Error: Hewwo world.  I crash you!!!' from http://fiddle.jshell.net/xYsRA/1/show/:32 fiddle.jshell.net:21
Caught[via 'error' event]:  'Uncaught Error: Hewwo world.  I crash you!!!' from http://fiddle.jshell.net/xYsRA/1/show/:32 fiddle.jshell.net:26
ErrorEvent {lineno: 32, filename: "http://fiddle.jshell.net/xYsRA/1/show/", message: "Uncaught Error: Hewwo world.  I crash you!!!", clipboardData: undefined, cancelBubble: false…}
 fiddle.jshell.net:27\

Weitere Informationen:

  • Wenn Sie entfernen die "return true" / "evt.preventDefault ()" Linien, dann, nachdem der Fehler protokolliert wird, wird es auf der JS-Konsole in gewohnter Weise drucken.

  • Im Gegensatz zu den oben gemachten Angaben, window.onerror arbeitete in allen Browsern ich getestet. Allerdings ist die addEventListener Methode wahrscheinlich besser sowieso und bietet reichere Semantik.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top