2013-09-04 17 views
15

विफल रहता है, जहां "नया फ़ंक्शन का उपयोग न करें" और/या "eval बुरा है" पर एक लंबी टिप्पणी अनुभाग को शॉर्टकट करने के लिए, यह प्रश्न इस बारे में है कि यदि संभव हो तो कैसे पहुंचें, new Function() कन्स्ट्रक्टर विफल होने से संबंधित त्रुटि जानकारी। स्पेस और मानक ब्राउज़र कार्यान्वयन की अनुमति के लिए जावास्क्रिप्ट का फायदा उठाने का प्रयास करते समय ब्राउजर मुझे क्या करने देगा, इस बारे में एक सीमा की खोज करने के लिए ज्यादातर सवाल है। तो उस अस्वीकरण के साथ:पता लगाएं कि नया फ़ंक्शन()

किसी नए फ़ंक्शन() कॉल के माध्यम से कोड का मूल्यांकन करते समय, क्या यह पता लगाने का कोई तरीका है कि फ़ंक्शन की सामग्री में सिंटैक्स त्रुटि होती है, अगर अवैध-वाक्यविन्यास कोड का मूल्यांकन किया जा रहा है? यानी .:

try { 
    var generator = new Function(input); 
    try { 
    generator(); 
    } 
    catch (runtimeError) { 
    console.error("legal code; unforeseen result: ", runtimeError); 
    } 
} 
catch (syntaxError) { 
    console.error("illegal code; syntax errors: ", syntaxError); 
} 

जब जनरेटर के निर्माण में विफल रहता है, वहाँ (से ब्राउज़र, jslint का उपयोग नहीं कर या किसी अन्य बाहरी पुस्तकालय) पता लगाने के लिए क्या त्रुटि थी या यह जहां हुआ एक तरीका है?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError/prototype का उल्लेख एक सिंटैक्स त्रुटि एक filename और linenumber संपत्ति है, लेकिन इन एक नया समारोह() मैं क्या बता सकता से निर्माता के माध्यम से मूल्यांकन किया जाता गतिशील कोड के लिए अपरिभाषित हैं, तो त्रुटि वस्तु पर ही भरोसा एक विकल्प हो करने के लिए नहीं लगता है । ब्राउज़र में कोड को पेश करने के वैकल्पिक तरीके हैं ताकि कोड, एक बार जब हम जानते हैं कि इसमें असफल नए फ़ंक्शन कॉल से सिंटैक्स त्रुटियां हैं, तो यह पता लगाने के लिए उपयोग किया जा सकता है कि समस्या जेएस इंजन के अनुसार कहां है?

(बेशक, यदि लक्ष्य केवल सिंटैक्स त्रुटियों को ढूंढना था, तो प्रीप्रोसेस चरण के रूप में जेस्लिंट जाने-माने समाधान होगा, लेकिन मुझे इस बात से अधिक दिलचस्पी है कि ब्राउज़रों को रिपोर्ट करने के लिए कुछ तरीके से किया जा सकता है या नहीं यह जानकारी, भले ही सीमित रूप में "लाइन/चार पर कुछ त्रुटि है ..."

उत्तर

4

यह पता लगाने के लिए असंभव है कि यह कहां हुआ। लेकिन आप जानकारी प्राप्त करने के लिए Exception.message देखना चाहते हैं कि त्रुटि क्या थी।

उदाहरण: http://jsbin.com/IRoDiJIV/1/watch?js

+0

मुझे एक समाधान मिला है, लेकिन कोड चलाने में त्रुटियों को पकड़ने पर विचार नहीं किया गया था, यह एक उपयोगी जोड़ है। –

+0

वह उदाहरण एक रनटाइम अपवाद है (विशेष रूप से, एक संदर्भ त्रुटि), एक सिंटेक्स त्रुटि नहीं! बीटीडब्ल्यू, आपका उदाहरण वास्तव में लॉग इन करता है जहां त्रुटि हुई: 'लाइन 1 पर फेंकने में त्रुटि, <अज्ञात फ़ंक्शन>() में कॉलम 0: कॉलंडिफाइन फ़ंक्शन(); लाइन 18 से कॉल किया गया, कॉलम 4 <अज्ञात फ़ंक्शन>() में http://run.jsbin.com/runner में: जनरेटर(); लाइन 11 से कॉल किया गया, कॉलम 7 http://run.jsbin.com/runner में: (function() {' – Bergi

+0

उसने किया? त्रुटि पर आपने किस संपत्ति/विधि का उपयोग किया? डॉकू में कोई जानकारी नहीं मिली या उदाहरण में (क्रोम में भाग गया) – floww

1

मिले एक समाधान अपने आप को एक simiar पद्धति का उपयोग करके setting breakpoints in evaled code

क्रोम देव उपकरणों के सूत्रों पैनल में करने के लिए, मैं (new Function लाइन पर एक सशर्त ब्रेकप्वाइंट में निम्नलिखित डाल के बाद से यह पुस्तकालय कोड है और मैं इसे बदल नहीं सकता।)

(function(eval_js, load_js) { 
    try { 
    eval(eval_js); 
    } catch (e) { 
    (function addCode(js) { 
     var e = document.createElement('script'); 
     e.type = 'text/javascript'; 
     e.src = 'data:text/javascript;charset=utf-8,' + escape(js); 
     document.body.appendChild(e); 
     console.warn("Inserted Script for ", js); 
    })(load_js.replace(/;/g,";\n")); 
    handlerCode = ""; 
    return false; 
    } 
    return false; 
})("new Function('event', handlerCode)", handlerCode) 
+0

आप उस से 'eval_js' में सिंटैक्स त्रुटि के लिननंबर को कैसे प्राप्त करते हैं? – Bergi

+0

@ बर्गि , यह एक नए स्क्रिप्ट तत्व में डेटा यूरी के माध्यम से हैंडलर_जेएस कोड लोड करेगा, जब रन कंसोल में एक त्रुटि देगा जो आप क्रोम देव टूल्स और फायरबग –

+1

में डीबग कर सकते हैं, लेकिन क्या यह त्रुटि प्रोग्रामेटिक रूप से किसी भी के बिना एक्सेस करना संभव है डीबग कंसोल? यही ओपी करना चाहता है। – Bergi

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