这可能吗?我有一个处理程序,每次错误命中时都会将字符串信息附加到字符串,然后在窗口卸载时我想通过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
}
})(),
答案 0 :(得分:0)
如果发生错误,执行将停止,并且可能会调用window.onerror <(不保证所有错误)。
如果发生错误但被try-catch捕获,则在window.onerror 中设置的功能将不会被调用。
如果错误处理代码中发生错误......:)
onbeforeunload不是一个好赌注。它甚至可能不会执行您的代码。它用于向用户显示文本,并且对浏览器有不同的限制。