दिलचस्प पोस्ट
स्ट्रिंग के बाएं हिस्से को कैसे निकालें? आंशिक मिलान GAE खोज API HTML इनपुट प्रकार "फ़ाइल" या किसी अन्य तरीके से फ़ोल्डर निर्देशिका कैसे प्राप्त करें? जावास्क्रिप्ट: ईवेंट श्रोता को हटा दें गैर-स्थिर सदस्य तक पहुंचने के लिए एक ऑब्जेक्ट संदर्भ की आवश्यकता है निर्दिष्ट स्थिति पर तत्व प्राप्त करें – जावास्क्रिप्ट विम में regex मैच छोड़कर सब कुछ निकालें जावा में एक स्ट्रिंग के वर्णों के माध्यम से पुनरावृति करने के लिए सबसे आसान / सबसे अच्छा / सबसे सही तरीका क्या है? जावा: किसी विशेष वर्ण के बाद शुरू होने वाली स्ट्रिंग से एक सबस्ट्रिंग प्राप्त करना जावास्क्रिप्ट कोड को <a> में डालने के विभिन्न तरीकों के बीच अंतर क्या है? सी ++ में एक हेडडर फाइल में "नेमस्पेस का उपयोग करना" एक बुरा विचार क्यों शामिल है? गतिविधि OnDestroy कभी नहीं बुलाया? क्यों (int) x के बजाय static_cast <int> (x) का उपयोग करें? AngularJS + JQuery: गतिशील सामग्री को कोणीयलेज़ में काम करने के लिए कैसे करें मैं एक्सएमएल में एम्पर्सैंड से कैसे बच सकता हूं ताकि उन्हें एचटीएमएल में संस्थाओं के रूप में प्रस्तुत किया जाए?

जावास्क्रिप्ट वैश्विक त्रुटि हैंडलिंग

मैं हर अपरिभाषित फ़ंक्शन त्रुटि को फेंकना चाहूंगा क्या जावास्क्रिप्ट में कोई वैश्विक त्रुटि हैंडलिंग सुविधा है? उपयोग का मामला फ्लैश से फ़ंक्शन कॉल को पकड़ रहा है जिसे परिभाषित नहीं किया गया है।

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट वैश्विक त्रुटि हैंडलिंग"

क्या यह आपकी सहायता करता है:

<script type="text/javascript"> window.onerror = function() { alert("Error caught"); }; xxx(); </script> 

मुझे यकीन नहीं है कि यह फ़्लैश त्रुटियों को कैसे संभालता है …

अद्यतन: यह ओपेरा में काम नहीं करता है, लेकिन मैं अभी ड्रैगनफ़िक्स को देख रहा हूं कि यह क्या हो रहा है। ड्रैकफ़ोन हैकिंग के बारे में सुझाव इस सवाल से आया था:

मिमिक विंडो जावास्क्रिप्ट का उपयोग ओपेरा में आतंक

कैसे अनियंत्रित जावास्क्रिप्ट त्रुटियाँ पकड़ने के लिए

एक ईवेंट हैंडलर के लिए window.onerrorwindow.onerror घटना को असाइन करें:

 <script type="text/javascript"> window.onerror = function(msg, url, line, col, error) { // Note that col & error are new to the HTML 5 spec and may not be // supported in every browser. It worked for me in Chrome. var extra = !col ? '' : '\ncolumn: ' + col; extra += !error ? '' : '\nerror: ' + error; // You can view the information in an alert to see things working like this: alert("Error: " + msg + "\nurl: " + url + "\nline: " + line + extra); // TODO: Report this error via ajax so you can keep track // of what pages have JS issues var suppressErrorAlert = true; // If you return true, then error alerts (like in older versions of // Internet Explorer) will be suppressed. return suppressErrorAlert; }; </script> 

जैसे कि कोड में टिप्पणी की गई है, अगर window.onerror का वापसी मान। window.onerror true तो ब्राउजर को एक चेतावनी संवाद दिखाया जाना चाहिए।

खिड़की कब। आतंक घटना आग?

संक्षेप में, घटना तब उठाया जाता है जब 1)। एक अनचाहे अपवाद या 2 है।) एक संकलन समय त्रुटि उत्पन्न होती है।

बिना अपवाद अपवाद

  • "कुछ संदेश"
  • call_something_undefined ();
  • cross_origin_iframe.contentWindow.document ;, एक सुरक्षा अपवाद

संकलन त्रुटि

  • <script>{</script>
  • <script>for(;)</script>
  • <script>"oops</script>
  • setTimeout("{", 10); , यह एक स्क्रिप्ट के रूप में पहली तर्क को संकलित करने का प्रयास करेगा

ब्राउज़र्स का समर्थन विंडो। आतंक

  • क्रोम 13+
  • Firefox 6.0+
  • इंटरनेट एक्सप्लोरर 5.5+
  • ओपेरा 11.60+
  • सफ़ारी 5.1+

स्क्रीनशॉट:

उपरोक्त आतंक कोड का एक परीक्षण पृष्ठ पर जोड़ने के बाद कार्रवाई में इसका उदाहरण:

 <script type="text/javascript"> call_something_undefined(); </script> 

खिड़की द्वारा सूचित त्रुटि की जानकारी दिखा रहा है जावास्क्रिप्ट चेतावनी। आतंक घटना

JSFiddle:

https://jsfiddle.net/nzfvm44d/

संदर्भ:

  • मोज़िला डेवलपर नेटवर्क :: window.error
  • एमएसडीएन :: वेब पेज त्रुटियों से निपटने और से बचाव भाग 2: रन-टाइम त्रुटियाँ
  • मूल बातें पर वापस – जावास्क्रिप्ट आतंक घटना
  • DEV.OPERA :: विंडो त्रुटि के साथ बेहतर त्रुटि हैंडलिंग
  • विंडो ऑन इयर इवेंट
  • जावास्क्रिप्ट त्रुटियों को दबाने के लिए आतंक घटना का उपयोग करना
  • SO :: window.errorerror फ़ायरफ़ॉक्स में फायरिंग नहीं करता है

परिष्कृत त्रुटि हैंडलिंग

यदि आपकी त्रुटि से निपटने बहुत परिष्कृत है और इसलिए एक त्रुटि खुद फेंक सकता है, तो यह संकेत दे रहा है कि क्या आप पहले से ही "errorHandling-mode" में हैं इस तरह:

 var appIsHandlingError = false; window.onerror = function() { if (!appIsHandlingError) { appIsHandlingError = true; handleError(); } }; function handleError() { // graceful error handling // if successful: appIsHandlingError = false; } 

अन्यथा आप अपने आप को अनंत लूप में पा सकते हैं।

अटैटस का प्रयास करें जो आधुनिक वेब एप्लिकेशन के लिए उन्नत त्रुटि ट्रैकिंग और वास्तविक उपयोगकर्ता मॉनिटरिंग प्रदान करता है।

https://www.atatus.com/

मुझे समझाइए कि स्टैकट्रेट कैसे प्राप्त करें जो सभी ब्राउज़र में उचित रूप से पूर्ण हैं

जावास्क्रिप्ट में त्रुटि हैंडलिंग

आधुनिक क्रोम और ओपेरा पूरी तरह से एचटीएमएल 5 ड्रीम स्पेक को त्रुटिएवेंट और विंडो के लिए समर्थन करते हैं। आतंक इन दोनों ब्राउज़रों में आप या तो window.onerror प्रयोग कर सकते हैं। window.onerror , या 'त्रुटि' घटना से ठीक से बाँध सकते हैं:

 // Only Chrome & Opera pass the error object. window.onerror = function (message, file, line, col, error) { console.log(message, "from", error.stack); // You can send data to your server // sendError(data); }; // Only Chrome & Opera have an error attribute on the event. window.addEventListener("error", function (e) { console.log(e.error.message, "from", e.error.stack); // You can send data to your server // sendError(data); }) 

दुर्भाग्य से फ़ायरफ़ॉक्स, सफारी और आईई अभी भी आसपास हैं और हमें उन्हें भी समर्थन देना है। चूंकि खिड़की में स्टैकट्र्रेस उपलब्ध नहीं है। window.onerror हमें थोड़ा और काम करना है

यह पता चला है कि एक ही चीज़ हम त्रुटियों से स्टैकेट प्राप्त करने के लिए कर सकते हैं, हमारे सभी कोड को एक try{ }catch(e){ } ब्लॉक में e.stack और फिर e.stack को e.stack । हम इस कार्य को एक समारोह के साथ कुछ आसान बना सकते हैं जिसे रैप कहा जाता है, जो फ़ंक्शन लेता है और अच्छी त्रुटि हैंडलिंग के साथ एक नया फ़ंक्शन देता है।

 function wrap(func) { // Ensure we only wrap the function once. if (!func._wrapped) { func._wrapped = function () { try{ func.apply(this, arguments); } catch(e) { console.log(e.message, "from", e.stack); // You can send data to your server // sendError(data); throw e; } } } return func._wrapped; }; 

यह काम। आपके द्वारा मैन्युअल रूप से लपेटे जाने वाले किसी भी फ़ंक्शन को अच्छी त्रुटि हैंडलिंग होगी, लेकिन यह पता चला है कि हम वास्तव में अधिकांश मामलों में अपने आप के लिए इसे स्वचालित रूप से कर सकते हैं।

addEventListener की वैश्विक परिभाषा को बदलकर, ताकि वह स्वचालित रूप से सबसे अधिक कोड के आसपास try{ }catch(e){ } कर सकते हैं कॉलबैक को लपेटता है यह मौजूदा कोड को जारी रखने की सुविधा देता है, लेकिन उच्च-गुणवत्ता अपवाद ट्रैकिंग शामिल करता है

 var addEventListener = window.EventTarget.prototype.addEventListener; window.EventTarget.prototype.addEventListener = function (event, callback, bubble) { addEventListener.call(this, event, wrap(callback), bubble); } 

हमें यह भी सुनिश्चित करने की आवश्यकता है कि removeEventListener काम कर रहा है फिलहाल ऐसा नहीं होगा क्योंकि addEventListener को addEventListener लिए तर्क बदला गया है। फिर हमें केवल prototype ऑब्जेक्ट पर इसे ठीक करना होगा:

 var removeEventListener = window.EventTarget.prototype.removeEventListener; window.EventTarget.prototype.removeEventListener = function (event, callback, bubble) { removeEventListener.call(this, event, callback._wrapped || callback, bubble); } 

अपने बैकएंड में त्रुटि डेटा संचारित करें

आप निम्नानुसार छवि टैग का उपयोग करके त्रुटि डेटा भेज सकते हैं

 function sendError(data) { var img = newImage(), src = 'http://yourserver.com/jserror&data=' + encodeURIComponent(JSON.stringify(data)); img.crossOrigin = 'anonymous'; img.onload = function success() { console.log('success', data); }; img.onerror = img.onabort = function failure() { console.error('failure', data); }; img.src = src; } 

अस्वीकरण: मैं https://www.atatus.com/ पर एक वेब डेवलपर हूं I

ऐसा लगता है कि window.onerror सभी संभव त्रुटियों तक पहुंच प्रदान नहीं करता है। विशेष रूप से यह उपेक्षा करता है:

  1. <img> लोड हो रहा है त्रुटियाँ (प्रतिक्रिया> = 400)।
  2. <script> लोडिंग त्रुटियां (प्रतिक्रिया> = 400)
  3. वैश्विक त्रुटियों यदि आपके पास आपके ऐप में कई अन्य लाइब्रेरी हैं तो window.onerror को जोड़ तोड़ सकते हैं। अज्ञात तरीकों से (जिक्र, कोणीय आदि)।
  4. संभवत: कई मामलों में मैं अब इस पर अवलोकन करने के बाद नहीं चला (IFrames, stack overflow, आदि)।

यहां एक ऐसी स्क्रिप्ट की शुरुआत है जो इन त्रुटियों में से कई पकड़ती है, ताकि आप विकास के दौरान अपने ऐप को अधिक मजबूत डीबगिंग जोड़ सकें।

 (function(){ /** * Capture error data for debugging in web console. */ var captures = []; /** * Wait until `window.onload`, so any external scripts * you might load have a chance to set their own error handlers, * which we don't want to override. */ window.addEventListener('load', onload); /** * Custom global function to standardize * window.onerror so it works like you'd think. * * @see http://www.quirksmode.org/dom/events/error.html */ window.onanyerror = window.onanyerror || onanyerrorx; /** * Hook up all error handlers after window loads. */ function onload() { handleGlobal(); handleXMLHttp(); handleImage(); handleScript(); handleEvents(); } /** * Handle global window events. */ function handleGlobal() { var onerrorx = window.onerror; window.addEventListener('error', onerror); function onerror(msg, url, line, col, error) { window.onanyerror.apply(this, arguments); if (onerrorx) return onerrorx.apply(null, arguments); } } /** * Handle ajax request errors. */ function handleXMLHttp() { var sendx = XMLHttpRequest.prototype.send; window.XMLHttpRequest.prototype.send = function(){ handleAsync(this); return sendx.apply(this, arguments); }; } /** * Handle image errors. */ function handleImage() { var ImageOriginal = window.Image; window.Image = ImageOverride; /** * New `Image` constructor. Might cause some problems, * but not sure yet. This is at least a start, and works on chrome. */ function ImageOverride() { var img = new ImageOriginal; onnext(function(){ handleAsync(img); }); return img; } } /** * Handle script errors. */ function handleScript() { var HTMLScriptElementOriginal = window.HTMLScriptElement; window.HTMLScriptElement = HTMLScriptElementOverride; /** * New `HTMLScriptElement` constructor. * * Allows us to globally override onload. * Not ideal to override stuff, but it helps with debugging. */ function HTMLScriptElementOverride() { var script = new HTMLScriptElement; onnext(function(){ handleAsync(script); }); return script; } } /** * Handle errors in events. * * @see http://stackoverflow.com/questions/951791/javascript-global-error-handling/31750604#31750604 */ function handleEvents() { var addEventListenerx = window.EventTarget.prototype.addEventListener; window.EventTarget.prototype.addEventListener = addEventListener; var removeEventListenerx = window.EventTarget.prototype.removeEventListener; window.EventTarget.prototype.removeEventListener = removeEventListener; function addEventListener(event, handler, bubble) { var handlerx = wrap(handler); return addEventListenerx.call(this, event, handlerx, bubble); } function removeEventListener(event, handler, bubble) { handler = handler._witherror || handler; removeEventListenerx.call(this, event, handler, bubble); } function wrap(fn) { fn._witherror = witherror; function witherror() { try { fn.apply(this, arguments); } catch(e) { window.onanyerror.apply(this, e); throw e; } } } } /** * Handle image/ajax request errors generically. */ function handleAsync(obj) { var onerrorx = obj.onerror; obj.onerror = onerror; var onabortx = obj.onabort; obj.onabort = onabort; var onloadx = obj.onload; obj.onload = onload; /** * Handle `onerror`. */ function onerror(error) { window.onanyerror.call(this, error); if (onerrorx) return onerrorx.apply(this, arguments); }; /** * Handle `onabort`. */ function onabort(error) { window.onanyerror.call(this, error); if (onabortx) return onabortx.apply(this, arguments); }; /** * Handle `onload`. * * For images, you can get a 403 response error, * but this isn't triggered as a global on error. * This sort of standardizes it. * * "there is no way to get the HTTP status from a * request made by an img tag in JavaScript." * @see http://stackoverflow.com/questions/8108636/how-to-get-http-status-code-of-img-tags/8108646#8108646 */ function onload(request) { if (request.status && request.status >= 400) { window.onanyerror.call(this, request); } if (onloadx) return onloadx.apply(this, arguments); } } /** * Generic error handler. * * This shows the basic implementation, * which you could override in your app. */ function onanyerrorx(entity) { var display = entity; // ajax request if (entity instanceof XMLHttpRequest) { // 400: http://example.com/image.png display = entity.status + ' ' + entity.responseURL; } else if (entity instanceof Event) { // global window events, or image events var target = entity.currentTarget; display = target; } else { // not sure if there are others } capture(entity); console.log('[onanyerror]', display, entity); } /** * Capture stuff for debugging purposes. * * Keep them in memory so you can reference them * in the chrome debugger as `onanyerror0` up to `onanyerror99`. */ function capture(entity) { captures.push(entity); if (captures.length > 100) captures.unshift(); // keep the last ones around var i = captures.length; while (--i) { var x = captures[i]; window['onanyerror' + i] = x; } } /** * Wait til next code execution cycle as fast as possible. */ function onnext(fn) { setTimeout(fn, 0); } })(); 

इसका उपयोग इस तरह किया जा सकता है:

 window.onanyerror = function(entity){ console.log('some error', entity); }; 

पूर्ण स्क्रिप्ट में एक डिफ़ॉल्ट कार्यान्वयन है जो एक अर्ध-पठनीय "प्रदर्शन" संस्करण / त्रुटि की प्राप्ति करता है जो इसे प्राप्त करता है। ऐप-विशिष्ट त्रुटि हैंडलर के लिए प्रेरणा के लिए इस्तेमाल किया जा सकता है डिफ़ॉल्ट कार्यान्वयन भी पिछले 100 त्रुटि संस्थाओं के लिए एक संदर्भ रखता है, ताकि आप इन्हें वेब कंसोल में उनकी जांच कर सकें:

 window.onanyerror0 window.onanyerror1 ... window.onanyerror99 

नोट: यह कई ब्राउज़र / देशी कन्स्ट्रक्टरों पर ओवरराइड करने के तरीकों से काम करता है। यह अनपेक्षित दुष्प्रभाव हो सकता है हालांकि, यह विकास के दौरान उपयोग करने के लिए उपयोगी साबित हुआ है, यह पता लगाने के लिए कि त्रुटियों के होने के कारण, विकास के दौरान न्यूरेली या संतरी जैसी सेवाओं को लॉग भेजने के लिए, ताकि हम विकास के दौरान त्रुटियों को माप सकें, और मंचन करने पर हम डिबग कर सकते हैं कि क्या चल रहा है एक गहरा स्तर इसे तब उत्पादन में बंद किया जा सकता है

उम्मीद है की यह मदद करेगा।

 // display error messages for a page, but never more than 3 errors window.onerror = function(msg, url, line) { if (onerror.num++ < onerror.max) { alert("ERROR: " + msg + "\n" + url + ":" + line); return true; } } onerror.max = 3; onerror.num = 0; 

मैं Trackjs को एक कोशिश देने की सिफारिश करेगा

यह एक सेवा के रूप में प्रवेश करने में त्रुटि है

यह सेट अप करने के लिए आश्चर्यजनक सरल है बस प्रत्येक पृष्ठ पर एक <स्क्रिप्ट> पंक्ति जोड़ें और यही वह है। इसका यह भी अर्थ है कि यदि आप इसे पसंद नहीं करते हैं तो यह निकालना आश्चर्यजनक रूप से सरल होगा।

सेंट्री जैसी अन्य सेवाएं हैं (जो कि ओपन सोर्स है यदि आप अपना स्वयं का सर्वर होस्ट कर सकते हैं), लेकिन यह Trackjs करता नहीं करता है। Trackjs अपने ब्राउज़र और अपने वेबसर्वर के बीच उपयोगकर्ता के संपर्क को रिकॉर्ड करते हैं ताकि आप वास्तव में उपयोगकर्ता के कदमों का पता लगा सकें, जो त्रुटि के कारण हो, जैसा कि केवल एक फ़ाइल और पंक्ति संख्या संदर्भ (और शायद स्टैक ट्रेस) के विपरीत है।

पहले से जुड़े आतंक कॉलबैक को भी संरक्षित किया जाना चाहिए

 <script type="text/javascript"> (function() { var errorCallback = window.onerror; window.onerror = function () { // handle error condition errorCallback && errorCallback.apply(this, arguments); }; })(); </script> 

यदि आप बिना किसी गलती की त्रुटियों और अनियंत्रित वादे के अस्वीकारों को संभाल करने के लिए एकीकृत तरीके चाहते हैं, तो आप बिना सख़्त पुस्तकालय पर एक नज़र डाल सकते हैं।

संपादित करें

 <script type="text/javascript" src=".../uncaught/lib/index.js"></script> <script type="text/javascript"> uncaught.start(); uncaught.addListener(function (error) { console.log('Uncaught error or rejection: ', error.message); }); </script> 

यह विंडो सुनता है खिड़की के अलावा अनियंत्रित अस्वीकृति।

आप window.error पर फ़ंक्शन निर्दिष्ट करके आतंक की घटना को सुनते हैं:

  window.onerror = function (msg, url, lineNo, columnNo, error) { var string = msg.toLowerCase(); var substring = "script error"; if (string.indexOf(substring) > -1){ alert('Script Error: See Browser Console for Detail'); } else { alert(msg, url, lineNo, columnNo, error); } return false; };