Подтвердить что ты не робот

Разве этот JavaScript разбил консоль?

Просто делайте некоторые вещи JavaScript в google chrome (не хотите сейчас пытаться в других браузерах, если это действительно наносит реальный урон), и я не уверен, почему это, казалось, сломало мою консоль.

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

После x (и введите) консоль перестает работать... Я перезапустил хром, и теперь, когда я делаю простой

console.clear();

Это дает мне

Console was cleared

И не очистка консоли. Теперь в моих скриптах console.log не регистрируется, и мне интересно, что происходит. 99% уверены, что это связано с двойными знаками процента (%%).

Кто-нибудь знает, что я сделал неправильно или еще лучше, как исправить консоль?

Здесь был указан отчет об ошибке для этой проблемы.

Изменить: Чувство довольно немое, но у меня был журнал "Сохранять журнал"... Вот почему консоль не очищалась.

4b9b3361

Ответ 1

Как обсуждалось в комментариях, существует много разных способов построения строки, которая вызывает эту проблему, и в большинстве случаев нет необходимости иметь знаки в два процента.

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

Однако это не просто наличие знака процента, который разбивает консоль Chrome, так как когда мы вводим следующий правильно сформированный URL-адрес, консоль продолжает работать исправно и создает кликабельную ссылку.

http://ab%20cd

Кроме того, строки http://% и http://%% также будут печататься правильно, так как Chrome не будет автоматически связывать строку URL-ссылки, если за http:// не должно быть не менее 3 символов.

Отсюда я предположил, что проблема должна заключаться в связывании строки URL-адреса в консоли, вероятно, в процессе декодирования искаженного URL-адреса. Я помнил, что функция JavaScript decodeURI будет генерировать исключение, если ему задан неверный URL-адрес, а поскольку инструменты разработчика Chrome в основном написаны на JavaScript, это может быть проблемой, которая очевидно, сбой консоли разработчика?

Чтобы проверить эту теорию, я запустил Chrome по ссылке команды, чтобы проверить, не были ли зарегистрированы какие-либо ошибки.

В самом деле, та же ошибка, которую вы видите, если вы запустили decodeURI на некорректном URL (т.е. decodeURI('http://example.com/%')), печаталась на консоли:

[4810: 1287: 0107/164725: ОШИБКА: КОНСОЛЬ (683)] "Неиспользуемый URIError: URI malformed", источник: chrome-devtools://devtools/bundled/devtools.js(683)

Итак, я открыл URL chrome-devtools://devtools/bundled/devtools.js в Chrome и в строке 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) вызывается на URL без проверки ошибок, тем самым бросая исключение и разбивая консоль разработчика.

Реальное исправление для этой проблемы будет связано с добавлением обработки ошибок в код консоли Chrome, но тем временем один из способов избежать этой проблемы - обернуть строку в сложный тип данных, например массив, чтобы предотвратить синтаксический анализ, когда каротаж.

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

К счастью, проблема с поврежденной консолью не сохраняется после закрытия вкладки и не влияет на другие вкладки.

Update:

По-видимому, проблема может сохраняться через вкладки и перезапускаться, если отмечен журнал сохранения. Снимите этот флажок, если у вас возникла эта проблема.

Обновление 2:

В Chrome 40 эта проблема исправлена.