2010-02-24 3 views
1

[업데이트. 좀 더 정확합니다, 나는 볼 ...] 자바 스크립트에서 다음 예를 참조하십시오jquery start() 함수에서 오류를 발견하지 못했습니다.

<html> 
    <head> 
    <script> 
     window.onerror = function() { 
     alert('error'); // this one works 
     try {i.dont.exist += 0;} 
     catch(e) { 
      // do some stacktrace stuff, this does not trigger 
      alert(e.stack); 
     } 
     }; 
    </script> 
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js' type='text/javascript'></script> 
    <script> 
     $(document).ready(function() { 
     foo[1]++; 
     }); 
    </script> 
    </head> 
<body> 
    <p>Hello world.</p> 
</body> 
</html> 

2.에서 경고가 트리거되지 않습니다. 왜? "foo [1] ++"을 "bogus line"으로 바꾸면 모든 것이 작동하고 두 가지 경고가 모두 나타납니다. 런타임 오류 문제가 있습니까?

답변

1

Javascript 오류로 인해 오류 처리기 함수가 성공적으로 정의되지 않았기 때문에 경고가 발생하지 않습니다. 코드 블록을 올바르게 구문 분석 할 수 없어 실행되지 않습니다.

설정 그것을이 방법은 :

<script> 
    $(function() { 
    window.onerror = function() { 
     // ... 
    }; 
    }); 
</script> 

가 자신의 스크립트 태그에 있다면, 그것은 확인을 수 있습니다. 이제 오류 처리기의 정의가 "준비 됨"이벤트 처리로 지연되는 것을 다시 생각해보십시오. 오류 처리기에 도달하기 전에 오류가 발생할 수 있기 때문입니다.

[편집] OK 여기에 완벽한 예이며, 나를 위해 잘 작동 :

<html> 
    <head> 
    <script> 
     window.onerror = function() { 
     alert("OH NO THERE HAS BEEN AN ERROR!"); 
     }; 
    </script> 
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js' type='text/javascript'></script> 
    <script> 
     $(function() { 
      here is some bogus stuff that will cause Javascript parse errors. 
     }); 
    </script> 
    </head> 
    <body> 
    <p>Hello world.</p> 
    </body> 
</html> 
+0

좋아, 내가 자신의 스크립트 태그에의 OnError 처리기를 옮겼습니다. 준비 함수 안에서 오류가 "스택"을 트리거하지 않는다는 동작을 변경하지 않습니다 ... – 2ni

+0

전체 예제를 보려면 – Pointy

+0

thx에 대한 내 업데이트를 확인하십시오. 이것은 나에게도 효과가 있지만 중요한 것은 아닙니다. 위의 작동하지 않는 예제를 업데이트했습니다. – 2ni

관련 문제