I set the window.onerror handler to detect errors. His purpose? To execute a sequence for each time an error occurs, another window.onunload handler sends it to the server. (Presumably with all errors).
The problem is that it is only capable of transferring the first error, because after the first event of the onerror handler onerror an error occurs and the script error ends ...
Is there any way around this?
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 } })(),
source share