2015-01-07 5 views
46

Google क्रोम में बस कुछ जावास्क्रिप्ट सामान करना (अब के लिए अन्य ब्राउज़रों में प्रयास नहीं करना चाहते हैं, अगर यह वास्तव में वास्तविक नुकसान कर रहा है) और मुझे यकीन नहीं है कि यह मेरे कंसोल को तोड़ने लग रहा था।क्या यह जावास्क्रिप्ट कंसोल तोड़ दिया?

>var x = "http://www.foo.bar/q?name=%%this%%"; 
<undefined 
>x 

एक्स के बाद (और प्रवेश) सांत्वना काम करना बंद ... मैं क्रोम को पुनः आरंभ और अब जब मैं एक साधारण

console.clear(); 

कर यह मेरे

Console was cleared 

दे रही है और न समाशोधन है कंसोल अब मेरी लिपियों में console.log पंजीकृत नहीं है और मैं सोच रहा हूं कि क्या हो रहा है। 99% यकीन है कि इसे डबल प्रतिशत संकेत (%%) के साथ करना है।

कोई भी जानता है कि मैंने अभी क्या गलत किया है या बेहतर है, कंसोल को कैसे ठीक किया जाए?

A bug report for this issue has been filed here.

संपादित करें: सुंदर गूंगा लग रहा है, लेकिन मैं रक्षित लॉग जाँच की ... यही कारण है कि कंसोल समाशोधन नहीं किया गया है था।

+3

पुन: उत्पन्न नहीं कर सकता है। क्रोम 39. – Mooseman

+0

वास्तव में? ठीक है ... अधिक इनपुट के लिए इंतजार कर सकता है, लेकिन अगर कोई भी बीटीडब्ल्यू, googlechrome v39.0.2171.95 (64-बिट) – user2879041

+0

पुन: पेश नहीं कर सकता है तो मुझे हटा दिया जाएगा, मुझे लगता है कि मैं पागल हो रहा हूं - जब आप x टाइप करते हैं, तो क्या क्या यह आपको देता है? डोर? – user2879041

उत्तर

51

जैसा कि टिप्पणियों में चर्चा की गई है, वास्तव में इस समस्या का कारण बनने वाली स्ट्रिंग बनाने के कई अलग-अलग तरीके हैं, और अधिकांश मामलों में दो प्रतिशत संकेत होने के लिए यह आवश्यक नहीं है।

http://example.com/% 
http://%%% 
http://ab% 
http://%ab 
http://%zz 

हालांकि, यह सिर्फ एक प्रतिशत संकेत है कि क्रोम कंसोल टूट जाता है, जब हम निम्नलिखित अच्छी तरह से गठित URL दर्ज के रूप में की उपस्थिति नहीं है, कंसोल को ठीक से काम करने के लिए जारी है और एक क्लिक करने योग्य लिंक पैदा करता है।

http://ab%20cd 

साथ ही, तार http://%, और http://%% भी ठीक से, जब से क्रोम नहीं ऑटो लिंक एक यूआरएल लिंक स्ट्रिंग जब तक http:// कम से कम 3 अक्षरों द्वारा पीछा किया जाता प्रिंट होगा।

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

इस सिद्धांत का परीक्षण करने के लिए, मैं कमांड लिंक से क्रोम चला गया, यह देखने के लिए कि क्या कोई त्रुटि लॉग इन की जा रही है या नहीं।

दरअसल, एक ही गलती करता है, तो आप एक विकृत URL पर decodeURI दौड़ा आप देखना होगा (यानी decodeURI('http://example.com/%')) कंसोल के लिए मुद्रित किया जा रहा था:

[4810:1287:0107/164725:ERROR:CONSOLE(683)] "Uncaught URIError: URI malformed", source: chrome-devtools://devtools/bundled/devtools.js (683)

तो, मैं क्रोम में यूआरएल chrome-devtools://devtools/bundled/devtools.js खोला, और पर लाइन 683, मुझे निम्नलिखित मिला।

{var parsedURL=new WebInspector.ParsedURL(decodeURI(url));var origin;var folderPath;var name;if(parsedURL.isValid){origin=parsedURL.scheme+"://"+parsedURL.host;if(parsedURL.port) 

हम देख सकते हैं, decodeURI(url) किसी भी त्रुटि जाँच के बिना यूआरएल पर बुलाया जा रहा है, इस प्रकार अपवाद फेंकने और डेवलपर कंसोल दुर्घटनाग्रस्त।

इस समस्या का एक वास्तविक समाधान क्रोम कंसोल कोड में त्रुटि प्रबंधन जोड़ने से आएगा, लेकिन इस बीच, समस्या से बचने का एक तरीका स्ट्रिंग को एक जटिल डेटा प्रकार में लपेटना होगा जैसे कि पार्सिंग को रोकने के लिए सरणी लॉगिंग करते समय।

var x = "http://example.com/%"; 
console.log([x]); 

शुक्र है, टैब बंद होने के बाद टूटा कंसोल मुद्दा जारी नहीं रहता है, और अन्य टैब को प्रभावित नहीं करेगा।

अद्यतन:

जाहिर है, इस मुद्दे को टैब और पुनरारंभ भर में बच सकते हैं अगर बचाना प्रवेश करें चेक किया गया है। यदि आपको यह समस्या हो रही है तो इसे अनचेक करें।

अद्यतन 2:

क्रोम 40 के रूप में, इस मुद्दे को तय हो गई है।

+7

इस मुद्दे की जड़ को खोजने पर महान जासूसी कार्य! :- डी –

+0

मेरा कंसोल मुद्दा टैब/नई विंडो में लगातार है। यह वास्तव में बहुत अप्रिय है। इसके अलावा, मुझे यकीन नहीं है कि यह जरूरी सही जवाब है, लेकिन मैं इसे अभी मार्क कर दूंगा क्योंकि आपने कंसोल पर स्ट्रिंग को लॉगिंग करने का एक तरीका बनाया है। कोई भी जानता है कि मैं अपने कंसोल को कैसे रीसेट कर सकता हूं? अभी भी "कंसोल साफ़ कर दिया गया" और कुछ भी साफ़ नहीं किया जा रहा है! – user2879041

+0

@ user2879041 हम्म, यह अजीब है, यह मेरे लिए नहीं है। क्या यह फिर से शुरू होता है? –

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