Ловить ошибки внутри окна.метод onerror?

Я установка window.onerror обработчик для перехвата ошибок. Его цель? Чтобы объединить строку при каждом возникновении ошибки, затем другой обработчик window.onunload отправляет его на сервер. (Предположительно со всеми ошибками).

проблема в том, что он может отправить только первую ошибку, потому что после onerror событие обработчика срабатывает в первый раз, ошибка не поймана и, таким образом, скрипт завершается...

есть ли способ обойти это?

ErrorManager: (function () {
        function Init(message) {
            InitErrorHandler();
            InitAjaxHandler();
            setTimeout("Interface.ErrorManager.SendErrorsToAjax()", 8000);
        }
        function InitErrorHandler() {
            Data.ErrorHandlerText = "";
            Data.ErrorHandlerCount = 0;
            window.onerror = function(errorMessage, url, line) {
                if(IsInIgnoreList(errorMessage)) { return; }
                Data.ErrorHandlerText += ("Error: "+(Data.ErrorHandlerCount+1)+" <br /><br />");
                //Get error specific info
                Data.ErrorHandlerText += escape(errorMessage) + "<br />";
                Data.ErrorHandlerText +=  escape(url) + "<br />";
                Data.ErrorHandlerText +=  escape(line) + "<br />";
                Data.ErrorHandlerCount++;
                console.log("BOOM"+errorMessage);
            }
        }

        function InitAjaxHandler() {
            window.onbeforeunload = function() { //when browser closed
                Data.ErrorHandlerCount > 0 && SendErrorsToAjax();
            }
        }
        function SendErrorsToAjax() {
            PrepareErrorsForAjax();
            $.getJSON(Interface.Utility.PrefixURL('/ajax/sendfeedback/handlejserrors/'+Data.ErrorHandlerText));
        }
        function IsInIgnoreList(str) {
            return str.indexOf('nsIDOMSVGLocatable') != -1 ? true : false;
        }

        function PrepareErrorsForAjax() {
            var preText = "<br /><br />A user has encountered a few errors: <br /><br />";
            //Get session info
            var userAgent, activePageID, accountNO, consumerNO;
            userAgent = escape(navigator.userAgent);
            preText += "User agent: "+userAgent+" <br />";

            if($.mobile.activePage) {
                activePageID = $.mobile.activePage.attr('id');
                preText += "Page ID: "+activePageID+" <br />";
            }
            //Get info that may or may not be set
            console.log("AUTH JSON "+Data.authJSON);
            console.log("CONSUMER JSON "+Data.authJSON.consumers);
            if(Data.authJSON && localStorage.lastConsumerNo) {
                preText += "Account Number: " +Data.authJSON.accountId+" <br />";
                preText += "Consumer Number: "+ localStorage.lastConsumerNo+" <br />";
            }
            preText += "<br /> The following errors were encountered:<br /><br />";
            Data.ErrorHandlerText = preText + Data.ErrorHandlerText;
        }
        return {
            Init: Init,
            SendErrorsToAjax: SendErrorsToAjax
        }
    })(),

1 ответов


добавить его в отдельной <script> тег, так что window.onerror не беспокоят ошибки скрипта в других тегах скрипта.

демо

<script>
    var trackErrorMsg = '';
    window.onerror = function(msg, url, lineNo)  {
      trackErrorMsg += msg;     
    }
</script>

обратите внимание, что выше не останавливается об ошибке в консоли браузера.. Приведенный выше код предназначен только для отслеживания ошибок.. Вы должны использовать попробовать...лови для обработки ошибок в любых конкретных разделах.

демо - показать, что это не работа когда у вас есть это в том же контексте выполнения.