2012-02-24 102 views
0

这可能吗?我有一个处理程序,不断追加字符串信息到一个字符串每次错误命中,然后在窗口卸载我想通过AJAX发送这个信息到服务器,window.onerror&捕捉多个错误

但一旦错误已被处理,似乎无法处理另一个,这是因为他们是致命的错误?或者我错过了什么?

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

如果发生错误,停止执行,并window.onerror 可能被称为(它不能保证所有的错误)。

如果错误发生,而是由一个try-catch抓住,你在设置window.onerror 功能不会被调用。

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

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