जैसा कि टिप्पणियों में चर्चा की गई है, वास्तव में इस समस्या का कारण बनने वाली स्ट्रिंग बनाने के कई अलग-अलग तरीके हैं, और अधिकांश मामलों में दो प्रतिशत संकेत होने के लिए यह आवश्यक नहीं है।
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 के रूप में, इस मुद्दे को तय हो गई है।
पुन: उत्पन्न नहीं कर सकता है। क्रोम 39. – Mooseman
वास्तव में? ठीक है ... अधिक इनपुट के लिए इंतजार कर सकता है, लेकिन अगर कोई भी बीटीडब्ल्यू, googlechrome v39.0.2171.95 (64-बिट) – user2879041
पुन: पेश नहीं कर सकता है तो मुझे हटा दिया जाएगा, मुझे लगता है कि मैं पागल हो रहा हूं - जब आप x टाइप करते हैं, तो क्या क्या यह आपको देता है? डोर? – user2879041