내 브라우저 쪽 JavaScript 코드에 모든 오류를 기록하고 싶습니다. 나는 여기에 대해 많은 토론을 보았고 window.onerror에 관해서 그물을 보았다. 그리고 그것이 브라우저 간 상호 작용을하지 않는다는 것이 분명하다. 그래서 try-catch로 최상위 엔트리 함수를 래핑 할 계획입니다. 문제는 많은 코드가 이벤트 핸들러입니다. 아직 테스트하지는 않았지만 이벤트 처리기 함수가 정의 된 위치에 관계없이 던져진 오류는 코드를 선언하는 이벤트 함수가 아니라 브라우저를 호출하는 브라우저 구현에 직접 실행됩니다. 내 유일한 선택은 가장 작은 익명의 오류 처리기라도 모든 오류 처리기에서 throw, catch 및 오류 로그 호출을 선언하는 것입니다. 나는 그다지 좋아하지 않는다.이벤트 처리기에 대한 전역 오류 로깅 javascript
가능한 솔루션 :
내가 브라우저 등록 이벤트를 건너 하나의 방법을 사용합니다. 나는 이런 식으로 뭔가를 수정할 수 있습니다 :
이function registerEventHandler(object, handlerRef) {
var wrapperFunction = function(evt) {
try {
handlerRef(evt);
} catch {
logError(error);
}
registerEvent(object, wrapperFunction);
}
그 구현 한 가지 중요한 문제가 있습니다. 나중에 이벤트 핸들러 함수에 대한 참조를 유지하여 나중에 등록 취소합니다. 핸들러가 원래 래퍼가 아닌 래퍼가 될 것이므로이 기능은 작동하지 않습니다. 이에 대한 해답은 랩퍼 -> 랩핑 된 맵핑 오브젝트를 구현하여 등록 해제시이를 사용하는 것입니다.
질문 :
내가 감히 마술사보다 더 영리한 해결책을 제공하는 자바 스크립트. 어쩌면 등록 전에 이벤트 핸들러 함수를 어떻게해서든지 늘릴 수 있습니다. 이것은 나의 JavaScript 지식만큼 멀리이다. 네 것은 어때?
큰 문제는 아닙니다. Squeegy, 오버 헤드가 많습니다. 나는 그것을 원할 수 없다. 나는 그것을 도울 수있다. –
+1 protectErrors의 경우, 감사합니다;) –
(좀 더 일반적인'protectErrors'를 만들기위한 사소한 업데이트, btw). 글쎄, 오버 헤드만큼 전역 오류 처리를 사용할 수 없다면, 유일한 선택은 지역 시도 잡기입니다. 그걸 해결할 방법이 아니야. –