2016-01-29 5 views
8

क्या कोई ऐसी जावास्क्रिप्ट त्रुटि है जिसे एम्बर (-cli) एप्लिकेशन में onerror द्वारा नियंत्रित नहीं किया जाता है? दूसरे शब्दों में, क्या हैंडलर को window.onerror में जोड़ने की आवश्यकता है?क्या एक एम्बर (-cli) ऐप विंडो ट्रिगर कर सकता है। आतंक?

मेरे परीक्षणों में मैं किसी भी त्रुटि के साथ नहीं आ सकता था जिसे एम्बर के आतंक द्वारा नियंत्रित नहीं किया जाएगा। सिंटेक्स त्रुटियों को पिछले एम्बर-क्ली की निर्माण प्रक्रिया नहीं मिली।

+1

आप 'संभाल चाहिए window.onerror'' Ember.onerror' और 'Ember.RSVP.onerror ' – runspired

+0

क्या आपके पास कोई साबित या उदाहरण है कि मुझे 'window.onerror' क्यों संभालना चाहिए? – pogopaule

+0

यदि आप पहले से ही 'एम्बर.ऑनोरर' संभालते हैं तो 'एम्बर.आरएसवीपी.ऑनोरर' को संभालने की वास्तविक आवश्यकता नहीं है। [कोड] देखें (https://github.com/emberjs/ember.js/blob/v2.2.2/packages/ember-runtime/lib/ext/rsvp.js#L71) – pogopaule

उत्तर

0

मेरे अनुभव में, मैं window.onerror को लागू करने की सलाह नहीं दूंगा, जब तक आपके पास ऐसा करने का कोई मजबूत कारण न हो और आप जानते हैं कि आप क्या कर रहे हैं।

मेरे ज्ञान के लिए एम्बर के onerror विधियों को window.onerror पर पिग्गी-बैक विधियों और ओवरराइड करने से आपके ऐप में सभी त्रुटियों को ओवरराइड/अक्षम करने की क्षमता है।

बिंदु में मामला, मुझे हाल ही में एक अनुभव था जहां मैंने देखा कि मेरी सभी जेएस त्रुटियों ने पूरी तरह से कंसोल पर लॉगिंग बंद कर दी है। इसका कारण यह था कि मेरी टीम में एक और डेवलपर ने मेरी अनुक्रमणिका.html में <script> टैग इंजेक्ट करने के लिए बूटस्ट्रैप किया था जो कुछ त्रुटि रिपोर्टिंग स्क्रिप्ट के लिए window.onerror का उपयोग करता था। नतीजा यह था कि ओवरराइडिंग window एम्बर के onerror को कड़वाहट से अक्षम कर दिया गया क्योंकि वे एक बुलबुले फैशन में काम करते थे।

मुझे लगता है कि अगर आप window.onerror को ओवरराइड करना चाहते हैं तो आपको यह सुनिश्चित करना होगा कि यह हमेशा false लौटाता है ताकि यह ब्राउज़र पर डिफ़ॉल्ट त्रुटि प्रबंधन को रोक न सके।

देखें: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror

मुझे आशा है कि कुछ हद तक स्पष्ट मदद करता है।

2

EmberJS त्रुटियों को अपनी सीमाओं के भीतरहो युक्त का एक बहुत अच्छा काम करता है। आपके एम्बर कोड के कारण त्रुटियों को सभी एम्बर-विशिष्ट हैंडलर में फंस जाना चाहिए।

हालांकि, ब्राउज़र जावास्क्रिप्ट एक जटिल जानवर है। एम्बर के के बाहर के बाहर होने वाली कोई भी जावास्क्रिप्ट त्रुटियां आंतरिक रूप से कैप्चर नहीं की जाएंगी और केवल वैश्विक window.onerror द्वारा इसका खुलासा किया जा सकता है। इनमें से कुछ उदाहरणों में शामिल हो सकते हैं: setTimeout की तरह देशी कार्यों में

  • असीम कॉलबैक और addEventListener
  • गैर एंबर जावास्क्रिप्ट पुस्तकालयों और एकीकरण के अलावा, इस तरह के धारी, ट्विटर, या विज्ञापन
  • ब्राउज़र विस्तार स्क्रिप्ट के रूप में जो कर सकते हैं अप्रत्याशित तरीकों से डीओएम के साथ बातचीत करें।

प्राप्त करने के लिए क्या अपने आगंतुकों के साथ क्या हो रहा है की पूरी तस्वीर, तो आप शायद दोनों Ember.onerrorऔरwindow.onerror जुड़ने और रिपोर्ट अपने लॉग करने के लिए वापस भेजना चाहिए। भले ही आप सक्रिय रूप से विकास नहीं कर रहे हैं, ब्राउज़र परिवर्तन आपके आवेदन में अचानक बग दिखाई दे सकते हैं। this webkit bug that caused ember to throw errors की तरह। TrackJS जैसे एम्बर ऐप्स से स्वचालित रूप से त्रुटियों को रिकॉर्ड करने के लिए अच्छे विकल्प हैं।

प्रकटीकरण: मैं TrackJS के संस्थापक डेवलपर्स में से एक हूं, तो मैं डिबग गए त्रुटियों :) का एक बहुत

संबंधित मुद्दे