Javascript window.onerror&;捕获多个错误

Javascript window.onerror&;捕获多个错误,javascript,jquery,error-handling,Javascript,Jquery,Error Handling,这可能吗?我有一个处理程序,每次出错时都会将字符串信息附加到字符串中,然后在窗口卸载时,我想通过AJAX将此信息发送到服务器 但一旦一个错误被处理,它似乎就无法处理另一个错误,这仅仅是因为它们是致命的错误吗?还是我遗漏了什么 ErrorManager: (function () { function Init(message) { InitErrorHandler(); InitAjaxHandler(); }

这可能吗?我有一个处理程序,每次出错时都会将字符串信息附加到字符串中,然后在窗口卸载时,我想通过AJAX将此信息发送到服务器

但一旦一个错误被处理,它似乎就无法处理另一个错误,这仅仅是因为它们是致命的错误吗?还是我遗漏了什么

ErrorManager: (function () {
        function Init(message) {
            InitErrorHandler();
            InitAjaxHandler();
        }
        function InitErrorHandler() {
            Data.ErrorHandlerText = "";
            Data.ErrorHandlerCount = 0;
            window.onerror = function(errorMessage, url, line) {
                Data.ErrorHandlerText += ("Error: "+(Data.ErrorHandlerCount+1)+" \n\n");
                //Get error specific info
                Data.ErrorHandlerText += escape(errorMessage) + "\n";
                Data.ErrorHandlerText +=  escape(url) + "\n";
                Data.ErrorHandlerText +=  escape(line) + "\n";
                Data.ErrorHandlerCount++;
                return true;
            }
        }
        function InitAjaxHandler() {
            window.onbeforeunload = function() { //when browser closed
                Data.ErrorHandlerCount > 0 && SendErrorsToAjax();
            }
        }
        function SendErrorsToAjax() {
            PrepareErrorsForAjax();
            //$.getJSON(Interface.Utility.PrefixURL('/emailjserrors/'+Data.ErrorHandlerText), AjaxCallback);
        }
        function AjaxCallback(response) {
        }
        function PrepareErrorsForAjax() {
            var preText = "A user has encountered a few errors: \n\n";
            //Get session info
            var userAgent, activePageID, accountNO, consumerNO;
            userAgent = escape(navigator.userAgent);
            preText += "User agent: "+userAgent+" \n";
            if($.mobile.activePage != null) {
                activePageID = $.mobile.activePage.attr('id');
                preText += "Page ID: "+activePageID+" \n";
            }
            //Get info that may or may not be set

            if(Data.authJSON != null && Data.authJSON.consumer != null) {
                preText += "Account Number: " +Data.authJSON.consumer.accountNo+" \n";
                preText += "Consumer Number: "+ Data.authJSON.consumer.consumerNO+" \n";
            }
            preText += "\n The following errors were encountered:\n\n";
            Data.ErrorHandlerText = preText + Data.ErrorHandlerText;
        }
        return {
            Init: Init,
            SendErrorsToAjax: SendErrorsToAjax
        }
    })(),

如果发生错误,执行将停止,并且可能会调用window.onerror(并非所有错误都能保证)

如果发生错误但被try-catch捕获,则不会调用在window.onerror中设置的函数

如果错误处理代码中发生错误…:)

onbeforeunload不是一个好的选择。它甚至可能不执行您的代码。它用于向用户显示文本,在不同浏览器中有不同的限制