문제

현재 웹 애플리케이션을 작업 중이며 페이지 내부의 JS 코드에 의해 잡히지 않는 JavaScript 오류를 처리하는 JS 로깅 메커니즘이 있습니다. 나는 Window.onerror를 사용하여 그러한 모든 오류를 잡아서 다른 곳에서 로그인합니다.

그러나 Window.onerror 이벤트가없는 오페라에 문제가 있습니다. 내가 생각할 수있는 한 가지 방법은 모든 JS 기능 코드를 처리하고 신체 부하 후 해당 기능 내부의 캐치 블록을 삽입하는 것입니다. 그러나 그것은 많은 경우에 작동하지 않지만 적어도 어느 정도 작동합니다.

나는이 접근법이 짜증나라고 확신하지만, 나는 더 나은 것을 생각할 수 없었다. 조언하십시오.

업데이트 : 지금은 아래 코드를 호출하여 가능한 한 많은 오류를 포착하고 있습니다.

function OnBodyLoad()
{
        var allElements = document.getElementsByTagName("*");
        for(var cnt = 0;cnt < allElements.length;cnt++)
        {
            RegisterAllEvents(allElements[cnt]);
        }
}
function RegisterAllEvents(objToProcess){
    for(var cnt = 0;cnt < objToProcess.attributes.length;cnt++){
        if(IsAttributeAnEvent(objToProcess.attributes[cnt].name))
        {
            objToProcess.attributes[cnt].value =  'try{'+objToProcess.attributes[cnt].value+'}catch(err){LogError("'+ objToProcess.id+'"'+ ',err);}';
        }
    }
}
도움이 되었습니까?

해결책

이것은 또한 Afaik의 Safari에서도 발생합니다.

확실히 할 수있는 것은 텍스트 구문 분석 대신 모든 JS 코드에 대한 글로벌 시도/캐치 블록을 만드는 것입니다.

(function ($){
  $(function (){
  });
})(jQuery);

다른 팁

오페라 11.60+가 지원합니다 window.onerror.

오페라 잠자리 지원합니다 원격 디버깅. 당신은 할 수 있습니다 해킹 (모두 JavaScript로 작성되었습니다)와 로그 오류 직접 (불행히도 프로토콜 아직 출판되지 않았습니다).

오페라에서 오류를 대체 할 수 있습니다.

window.onerror = function (msg) {
  // send msg to http://errors.net/log.php, for example
  (new Image()).src = 'http://errors.net/log.php?msg=' + encodeURIComponent(msg);
};
if (({}).toString.call(window.opera) === '[object Opera]') {
 (function () {
   var x = Error.prototype.toString;
   Error.prototype.toString = function () {
     var msg = '';
     try {
       msg = x.apply(this, arguments);
       if (typeof (window.onerror) === "function") {
         window.onerror(msg, typeof (this) === 'object' ? this.stack : '', '');
       }
     } catch (e) {}
     return msg;
   };
 }());
}

Opera 11.50에는 작동하지 않는 것 같습니다 ... 초기 버전의 경우에만 ...

여기에는 오페라가 이제 Window.onerror를 지원한다는 언급이 있습니다.

http://my.opera.com/odin/blog/2011/11/07/what-s-new-in-opera-development-snapshots-4-nevember-2011-edition

그러나 Window.onerror는 Opera Mini에서 작동하지 않는 것 같습니다 (예 : 사용자 에이전트 "Opera/9.80 (J2ME/MIDP; OPERA MINI/7.1.32422/30.3214; U; EN) PRESTO/2.8.119 버전/11.10"). 이것은 오페라 미니로 모바일에서 JavaScript를 디버깅하기가 정말 어렵습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top