javascript - window.onerror & 捕获多个错误

标签 javascript jquery error-handling

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

但是一旦处理了错误,似乎就无法处理另一个错误,这仅仅是因为它们是 fatal error 吗?还是我错过了什么?

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 不是一个好选择。它甚至可能不会执行您的代码。它用于向用户显示文本,并且跨浏览器具有不同的限制。

关于javascript - window.onerror & 捕获多个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9424512/

相关文章:

javascript - 如何仅删除所选延迟加载视频上的覆盖图像?

javascript - "invalid label"jQuery getJSON 的 Firebug 错误

c - 我试图打开一个 .csv 文件并在 C 编程中将其作为数组中的字符串读取

javascript - 记录javascript错误

javascript - Functional Javascript 书籍示例中的错误

javascript - 有条件地更改字段的 Mirth Java 代码

javascript - 服务器的安全 ajax GET/POST 请求

php - 如何从使用ajax的javascript函数获取值

excel - 选择分组形状阵列的错误处理失败

javascript - 根据动画延迟设置超时函数