2009-03-14 18 views
8

का उपयोग कर ओपेरा में आतंक हम वर्तमान में वेब एप्लिकेशन पर काम कर रहे हैं, मेरे पास एक जेएस लॉगिंग तंत्र है जो जावास्क्रिप्ट त्रुटि को संभालता है जो पेज के अंदर जेएस कोड द्वारा पकड़ा नहीं जाता है। मैं ऐसी सभी त्रुटियों को पकड़ने के लिए window.onerror का उपयोग कर रहा हूं और उन्हें और कहां लॉग इन कर रहा हूं।नकली खिड़की। जावास्क्रिप्ट

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

मुझे यकीन है कि इस दृष्टिकोण बेकार कर रहा हूँ, लेकिन, मैं कुछ भी बेहतर के बारे में सोच नहीं सकता था। कृपया सलाह दें।

अपडेट: अब, मैं मैं कर सकता के रूप में कई त्रुटियाँ पकड़ो करने के लिए कोड बोल रहा हूँ नीचे के लिए।

function OnBodyLoad() 
{ 
     var allElements = document.getElementsByTagName("*"); 
     for(var cnt = 0;cnt < allElements.length;cnt++) 
     { 
      RegisterAllEvents(allElements[cnt]); 
     } 
} 
function RegisterAllEvents(objToProcess){ 
    for(var cnt = 0;cnt < objToProcess.attributes.length;cnt++){ 
     if(IsAttributeAnEvent(objToProcess.attributes[cnt].name)) 
     { 
      objToProcess.attributes[cnt].value = 'try{'+objToProcess.attributes[cnt].value+'}catch(err){LogError("'+ objToProcess.id+'"'+ ',err);}'; 
     } 
    } 
} 
+1

कोड के लिए धन्यवाद! हम अपनी कंपनी में विकास मोड में इसका उपयोग कर सकते हैं (यदि यह बहुत धीमी नहीं है)। –

उत्तर

2

यह सफारी, AFAIK पर भी होता है।

क्या आप कर सकते थे निश्चित रूप से कर पाठ पार्स के बजाय सभी जे एस कोड के लिए एक वैश्विक आज़माएं/कैच ब्लॉक बनाने है - जो मुश्किल हो सकता है अगर आप जैसी चीजों में आई:

(function ($){ 
    $(function(){ 
    }); 
})(jQuery); 
+0

क्या आप कुछ कह रहे हैं जैसे यह काम करेगा? यह नहीं था: कोशिश करें { फ़ंक्शन CauseError() { // त्रुटि दस्तावेज़ फेंकने के लिए somethin करें .getElementById ('hjsdfkas')। Yeye = 'yyryr'; अलर्ट ('परीक्षण'); } } पकड़ें (ई) { अलर्ट ('एक त्रुटि हुई'); } – kalyang

+0

हाँ, यह काम करना चाहिए :) – Seb

+0

+1 के लिए सफारी में भी होता है। ओपेरा के साथ एक बग फ़ाइल के लिए – scunliffe

9

ओपेरा 11.60+ window.onerror का समर्थन करता है।

ओपेरा Dragonflyremote debugging का समर्थन करता है। आप hack it (यह सब जावास्क्रिप्ट में लिखा गया है) में सक्षम हो सकता है और स्वयं त्रुटियों को लॉग इन कर सकता है (दुर्भाग्य से प्रोटोकॉल isn't published yet)।

+0

+1। 'window.onerror' को जावास्क्रिप्ट 1.1 में परिभाषित किया गया था (एक दशक पहले अच्छी तरह से) – scunliffe

+1

यह ज्ञात सीमा है, कोई बग रिपोर्ट आवश्यक नहीं है। – hallvors

+0

** ओपेरा 11.60 ** इसका भी समर्थन करता है। – c69

5

आप ओपेरा में Error.prototype.toString को प्रतिस्थापित कर सकते हैं!

window.onerror = function (msg) { 
    // send msg to http://errors.net/log.php, for example 
    (new Image()).src = 'http://errors.net/log.php?msg=' + encodeURIComponent(msg); 
}; 
if (({}).toString.call(window.opera) === '[object Opera]') { 
(function() { 
    var x = Error.prototype.toString; 
    Error.prototype.toString = function() { 
    var msg = ''; 
    try { 
     msg = x.apply(this, arguments); 
     if (typeof (window.onerror) === "function") { 
     window.onerror(msg, typeof (this) === 'object' ? this.stack : '', ''); 
     } 
    } catch (e) {} 
    return msg; 
    }; 
}()); 
} 

लगता है, यह ओपेरा 11.50 के लिए काम नहीं करता है ... केवल प्रारंभिक संस्करणों के लिए ...

0

वहाँ एक उल्लेख यहाँ है कि ओपेरा अब window.onerror समर्थन करता है:

http://my.opera.com/ODIN/blog/2011/11/07/what-s-new-in-opera-development-snapshots-4-november-2011-edition

लेकिन window.onerror (जैसे उपयोगकर्ता एजेंट ओपेरा मिनी में काम करने के लिए प्रतीत नहीं होता है "ओपेरा/9.80 (जे 2 एमई/MIDP, ओपेरा मिनी/7.1.32422/30.3214, यू, एन) Presto/2.8.119 संस्करण/11.10")। इससे ओपेरा मिनी के साथ मोबाइल पर जावास्क्रिप्ट को डीबग करना वाकई मुश्किल हो जाता है।

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