JavaScript는 도대치되지 않은/가입되지 않은 예외를위한 이벤트를 시작합니까?
-
19-08-2019 - |
문제
처리되지 않은 JavaScript 예외를 기록하고자합니다. 예외가 잡히지 않을 때 해고되는 이벤트가 있습니까? 브라우저에서 JavaScript 오류를 일으키기 전에 예외를 포착하려고하지만 시도/캐치 내에서 전체 응용 프로그램을 실행하지 않겠습니다. 모든 도움이 감사하겠습니다. 감사!
업데이트 : TVANFOSSON은 OnError를 가능성으로 지적했습니다. 사양의 일부가 아니며 IE 또는 Gecko 기반 브라우저에서만 사용할 수 있습니다.
onerror 지원 테이블 - http://www.quirksmode.org/dom/events/error.html
모질라의 문서 - https://developer.mozilla.org/en/dom/window.onerror
WebKit Bug Report- https://bugs.webkit.org/show_bug.cgi?id=8519
해결책
Onerror 핸들러를 사용해보십시오. 문서 MDN에서. 이렇게하면 오류가 감지 될 때 무언가를 할 수 있지만 시도/캐치 블록이 될 수있는 우아한 방식으로 계속할 수는 없습니다. 브라우저의 의심 할 여지 없이이 처리 방법에서 의심 할 여지없이 차이가 있습니다.
다른 팁
이 바이올린을 확인하십시오.
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... :(");
어떤 인쇄 :
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\
메모:
"return true" / "evt.preventDefault ()"라인을 제거하면 오류가 기록 된 후 JS 콘솔에서 일반적인 방식으로 인쇄됩니다.
위의 진술과는 달리, Window.onerror는 내가 테스트 한 모든 브라우저에서 작동했습니다. 그러나 AddeventListener 방법은 어쨌든 더 좋으며 더 풍부한 의미를 제공합니다.