2012-10-05 5 views
11

मैं समझने की कोशिश कर रहा हूं कि फ़ायरफ़ॉक्स (मैं 15 का उपयोग कर रहा हूं लेकिन यह रात में भी वही है) त्रुटि घटना की जानकारी तक पहुंचने का प्रयास करते समय वेबकिट की तरह व्यवहार नहीं कर रहा है।addEventListener का उपयोग कर फ़ायरफ़ॉक्स में त्रुटि ईवेंट विवरण कैसे प्राप्त करें?

यह एक हर जगह काम करता है:

window.onerror = function(message, lineno, filename) { } 

लेकिन निश्चित रूप से मैं नहीं चाहता कि यह प्रयोग करना चाहते हैं।

सही काम करने के लिए है:

window.addEventListener('error', function(e) { 
    console.log(e.message); 
}, false); 

दुर्भाग्य से यह एक ही WebKit में काम करता है। फ़ायरफ़ॉक्स में हैंडलर को बुलाया जाता है, लेकिन e ईवेंट लगभग खाली है: कोई संदेश नहीं, कोई लाइन नंबर नहीं, कोई फ़ाइल नाम नहीं है।

बहुत कम परीक्षण यहाँ है: http://jsbin.com/efexiw/1/edit

मुझे नहीं लगता कि यह एक बग, हालांकि है ... इसलिए सवाल यह है: मैं कैसे हाल फ़ायरफ़ॉक्स में त्रुटि विवरण मिलता है?

उत्तर

23

HTML5 specification requires कि एक पार्स विफलता के लिए ब्राउज़र का कारण बनता है:

... त्रुटि, समस्याग्रस्त स्थिति (लाइन नंबर और स्तंभ संख्या) के साथ, स्क्रिप्ट के लिए रिपोर्ट वैश्विक वस्तु का उपयोग कर के रूप में ... निशाना।

कहाँ "report the error" चरणों

शामिल
  1. चलो संदेश जो उपयोगकर्ता-एजेंट से परिभाषित स्ट्रिंग एक उपयोगी तरीके से त्रुटि का वर्णन किया

...

  1. घटना एक नए भरोसेमंद ErrorEvent उद्देश्य यह है कि बुलबुला नहीं है लेकिन रद्द करने योग्य है है, और जो घटना नाम error है।

  2. प्रारंभ घटना के messageसंदेश लिए विशेषता।

...

  1. डिस्पैच घटनालक्ष्य पर।

इस प्रकार, किसी HTML5- संगत ब्राउज़र window है, जो एक message विशेषता एक "उपयोगकर्ता-एजेंट से परिभाषित स्ट्रिंग एक उपयोगी तरीके से त्रुटि का वर्णन करने के लिए सेट शामिल हैं पर पार्स-टाइम त्रुटि घटनाओं रिपोर्ट करेंगे। "ऐसा करने वाला कोई भी ब्राउज़र संस्करण जो इस संबंध में अभी तक HTML5 अनुरूप नहीं है।


पहले (समय इस सवाल का लिखा गया था पर), window.onerror जानकारी है कि window.addEventListener("error") द्वारा प्रदान नहीं होता था। आप Firefox के किसी पुराने संस्करण का उपयोग करना आवश्यक है, आप कर सकते हैं safely use window.onerror:

// Example 1: 

// Prevent error dialogs from displaying -which is the window's normal 
// behavior- by overriding the default event handler for error events that 
// go to the window. 
window.onerror = null; 

// Example 2: 

var gOldOnError = window.onerror; 
// Override previous handler. 
window.onerror = function myErrorHandler(errorMsg, url, lineNumber) { 
    if (gOldOnError) 
    // Call previous handler. 
    return gOldOnError(errorMsg, url, lineNumber); 

    // Just let default handler run. 
    return false; 
} 
+0

मैं जवाब को स्वीकार क्योंकि कम से कम मुझे पता है कि स्थिति से निपटने के। बहुत बुरा मुझे समझ में नहीं आया कि क्यों फ़ायरफ़ॉक्स _seems_ ने इस "फीचर" को हटा दिया है (जो मैं अपनी खोजों में पढ़ रहा हूं, वह पुराने उदाहरण हैं जिन्हें एफएफ और अन्य ब्राउज़रों में काम करना है)। – Claudio

+0

एफएफ 38 में, कम से कम, शायद बहुत जल्द, addEventListener को प्रदान की गई त्रुटि घटना में कम से कम संदेश, फ़ाइल नाम और लिनेनो गुण हैं ... शायद अधिक। मैं वर्तमान में अधिक खोज के लिए, और किसी भी मानक के लिए जो विवरण परिभाषित करता हूं। – Victoria

+0

त्रुटि घटना के विवरण की कमी है, लेकिन [एमडीएन] (https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent) दिखाता है .colno उपलब्ध है, और प्रयोग कहता है .error.stack में उपलब्ध है FF38। – Victoria