मैंने त्रुटियों को पकड़ने के लिए window.onerror
हैंडलर सेट किया है। इसका उद्देश्य? हर बार एक त्रुटि होती है जब एक त्रुटि होती है, तो दूसरा हैंडलर window.onunload
इसे सर्वर पर भेजता है। (संभवतः सभी त्रुटियों के साथ)।खिड़की के अंदर त्रुटियों को पकड़ना। आतंक?
समस्या है, यह केवल क्योंकि पहली बार के लिए onerror
हैंडलर घटना आग के बाद, त्रुटि पकड़ नहीं है और इस तरह स्क्रिप्ट समाप्त हो जाता है, पहले ओवर त्रुटि भेजने में सक्षम है ...
वहाँ एक है इस के आसपास रास्ता?
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
}
})(),
कृपया कुछ कोड संलग्न करें। –
हां, कोशिश/पकड़ ब्लॉक का उपयोग करें। – Christian
इसे फिर से सैम कहें, यह पहली बात थी जिसके बारे में मैंने सोचा था, हां, कोशिश/पकड़ ब्लॉक का उपयोग करें। – Codebeat