2012-03-27 4 views
1

예를 들어 브라우저, Opera 또는 Chrome에 처리되지 않은 예외가 발생할 경우 스크립트 실행을 중지하지 말라고 할 수 있습니까? 브라우저에서 일부 JS 스크립트를 테스트 할 필요가 있지만 다른 (일반 브라우저가 아닌) 실행 환경을위한 코드가 포함되어 있으므로 try/catch를 사용하여 코드를 수정하는 것이 실용적이지 않습니다.브라우저에서 JS Uncaught 예외를 무시합니다.

크롬의 경우 처리기 기능을 window.onerror으로 설정하는 코드를 넣으려고 시도한 결과 단지 true을 반환하지만 오류는 콘솔에 나타나지 않지만 스크립트의 실행은 어쨌든 중단되었습니다.

구체적으로이 페이지에는 Appcelerator Titanium 플랫폼 용 코드가 포함되어 있지만 일반 jQuery 코드 만 테스트하므로 브라우저에서 코드를 작성하려고합니다.

+2

이미 try/catch에서 함수를 래핑 했습니까? 그냥 물어 보는 건데. – kpcrash

+0

내가 말했듯이 나는 페이지에 포함 된 스크립트를 변경하면 안된다. –

+0

맞지만 외부 소스에서 함수를 호출하는 경우에도 호출을 래핑 할 수 있으며 브라우저가 오류에 대한 경고를 분출하지 못하게해야합니다. – kpcrash

답변

0

현실적으로 생각한 것처럼 현실적으로 적용하는 것은 불가능합니다. 비교적

, Java 프로그램 언어되지 않은 예외 (예 : RuntimeException로 - 당신은 복구 할 수없는 예외) 동안 당신이 (당신이 복구 할 수 있습니다 예외) 체크 된 예외를 처리 할 수 ​​힘 당신의 통제 밖에서 실행시 일반적으로 발생할 수 . 본질적으로 이므로 프로그램을 중지해야합니다.

JS JVM에서 제기 된 예외는 Java와 달리 확인 된 범주와 확인되지 않은 범주에서 구분할 수 없습니다. 그와 같은 구별이 없기 때문에 스크립트를 중지하지 않아도됩니다.

함수/무한대를 나누면 어떻습니까? 그것으로부터 어떻게 회복해야합니까? 각각의 별개의 시나리오에는 뚜렷한 대답이 있습니다. 따라서 Exception이 두려워 할 때마다 try catch 블록을 사용하여 코드를 중단하고 해당 상황을 구체적으로 처리하는 것이 우려 대상으로 남고 유효한 응답 인 이유입니다. 이 런타임 예외를 catch하지 않기 때문에 window.onerror 이벤트 핸들러에 관해서는


, 그것은이 문제에 관해서는 관련이없는, 그것은 원래 예외가 시도의 catch 블록에 걸려 있지 않을 때 발생되는 오류 잡는다. 그렇기 때문에 원래의 예외 메시지에 추가 된 멋진 "Uncaught exception : xxxxx"메시지가 표시됩니다. 이미 예외가 발생했습니다. 스크립트가 이미 중지되었으므로이 시점에서 원하는대로 스크립트를 표시 할 수 있습니다.

2

당신이 연기 방식으로 의심되는 코드를 호출하면

setTimeout(THIS_MIGHT_THROW, 0) 

은 다음 "스레드"또는 "마이크로 작업"을 종료하지만,하지 않습니다 발생 오류가 귀하의 실행의 나머지 부분에 영향을 미친다.

+0

언젠가 나는 이것을 사랑한다. 언젠가 나는 이것을 싫어한다 ... – Sebas

관련 문제