js 오류를 포착할 때 일반적으로 try{}catch(e){}를 사용한 다음 e.errorMessage 및 기타 메서드를 통해 오류 정보를 얻은 후 오류를 보고합니다. 하지만 onerror 이벤트에 대해서는 별 우려가 없을 수도 있습니다. 오류가 있는 행 번호를 보고하는 방법에 대해서는 생각해 보셨나요? 혹시 이런 문제로 고민해보신 적 있으신가요? js에서 잘못된 줄번호를 캡쳐하는 것이 불가능하다고 생각하시나요? 누군가가 작성한 js 코드를 갑자기 발견했습니다. Onerror 이벤트, 저는 오래 전에 onerror에 대해 알고 있었지만 그 세 가지 매개변수와 그 특별한 속성을 이해한 적이 없습니다. 자체 조사와 테스트를 통해 onerror 이벤트에 대한 새로운 지식과 이해를 얻었습니다. 페이지에 에러가 없으면 window.onerror 이벤트가 존재하지 않는 것, 즉 null(말도 안되는 소리! 에러가 없으면 onerror가 발생하면 정상인가요?) 를 전달하여 수행할 연산 함수를 보통 전달합니다. 함수 이름(참조) onerror 이벤트(예: window.onerror=reportError;window.onerror=function(){alert('error')})를 제공하지만 다음과 같은 경우 이벤트에도 세 가지 기본 매개변수가 있다는 것을 알지 못할 수 있습니다. 오류 정보, 오류 페이지의 URL 및 오류 줄 번호입니다. 이는 onclick 및 onmouseover 이벤트와 같은 이벤트이지만 매개변수가 있다는 점을 알아야 합니다. 우리는 이것을 이렇게 테스트할 수 있습니다.
]
먼저 testError 메소드 바인딩 onerror 이벤트를 제공한 다음 테스트 메소드에서 오류를 트리거합니다. IE에서 실행하면 다음 프롬프트가 나타납니다.
---- ---- ---
Microsoft Internet Explorer
---------------
매개변수 수: 3
매개변수 1: 'error'가 정의되지 않았습니다.
매개변수 2: file://E:yanweitesttestError.html
매개변수 3: 14
--------------- -- -----------
알겠습니다
---------------
오류가 발생하면 testError 함수가 세 개의 매개변수를 캡처합니다. 함수를 onerror 이벤트에 바인딩하면 페이지가 실패할 때 위의 세 가지 매개변수를 캡처할 수 있습니다.
테스트 중 다음과 같은 문제도 발견되었습니다.
1. 함수 끝에 return true를 추가하면 함수 실패 시 시스템 오류 메시지(IE)가 팝업되지 않습니다.
2. 페이지에 여러 개의 오류가 발생할 경우 첫 번째 오류만 캡처하여 처리한 후 후속 프로그램의 실행을 종료합니다.
3. onerror 이벤트는 모든 오류를 캡처할 수 없습니다. (?? 이게 무슨 뜻인가요? 농담이 아닙니다.)
function test(){
aaaa;
}
adasdf의 정의되지 않은 오류를 캡처할 수 있습니다
function test(){
aaaa;
}
aaaa의 정의되지 않은 오류를 캡처할 수 있으며 test( ){} 또는 test()dd{} 함수는 캡처할 수 없으며 시스템 오류 메시지가 직접 나타납니다. 4. Onerror는 IE, FF 등의 브라우저에서 동일한 방식으로 실행되며, 둘 다 이 세 가지 매개변수를 포함합니다.