这个JavaScript打破了控制台吗?

时间:2015-01-07 21:16:46

标签: javascript google-chrome browser

只是在谷歌浏览器中做一些JavaScript的东西(现在不想在其他浏览器中尝试,以防这真的造成真正的损害)而且我不确定为什么这似乎打破了我的控制台。

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

在x(和输入)之后,控制台停止工作......我重新启动了chrome,现在我做了一个简单的

console.clear();

它给了我

Console was cleared

并没有清除控制台。现在在我的脚本console.log中没有注册,我想知道发生了什么。 99%肯定它与双百分号(%%)有关。

任何人都知道我做错了什么或者更好,如何修理控制台?

A bug report for this issue has been filed here.

编辑:感觉非常愚蠢,但我保留了日志检查...这就是控制台没有清除的原因。

1 个答案:

答案 0 :(得分:51)

正如评论中所讨论的,实际上有许多不同的方法来构造导致此问题的字符串,并且在大多数情况下没有必要有两个百分号。

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

但是,不仅仅存在百分号会破坏Chrome控制台,因为当我们输入以下格式正确的网址时,控制台会继续正常工作并生成可点击的链接。

http://ab%20cd

此外,字符串http://%http://%%也会正确打印,因为Chrome不会自动链接网址链接字符串,除非http://后跟至少3个字符

从这里我假设问题必须是在控制台中链接URL字符串的过程中,可能是在解码格式错误的URL的过程中。我记得如果给定格式错误的网址,JavaScript函数decodeURI会抛出异常,而且由于Chrome的开发人员工具主要是用JavaScript编写的,这是否会导致开发人员控制台崩溃? / p>

为了测试这个理论,我通过命令链接运行Chrome,以查看是否记录了任何错误。

事实上,如果您在格式错误的网址(即decodeURI)上运行decodeURI('http://example.com/%'),您会看到同样的错误:

  

[4810:1287:0107/164725:错误:控制台(683)]&#34;未捕获的URIError:URI格式错误&#34;,来源:chrome-devtools://devtools/bundled/devtools.js(683)

所以,我在Chrome中打开了网址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)

正如我们所看到的,在URL上调用了decodeURI(url)而没有任何错误检查,因此抛出异常并导致开发人员控制台崩溃。

此问题的真正解决方法是将错误处理添加到Chrome控制台代码中,但与此同时,避免此问题的一种方法是将字符串包装在复杂数据类型(如数组)中以防止解析日志记录。

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

值得庆幸的是,一旦选项卡关闭,破坏的控制台问题就不会持续存在,并且不会影响其他选项卡。

<强>更新

显然,如果选中“保留日志”,则问题可能会持续显示并重新启动。如果您遇到此问题,请取消选中此项。

更新2:

从Chrome 40开始,此问题已修复。