这个JavaScript破坏了控制台吗?

这个JavaScript破坏了控制台吗?,javascript,google-chrome,browser,Javascript,Google Chrome,Browser,只是在google chrome上做了一些JavaScript的东西(暂时不想在其他浏览器上尝试,以防这真的会造成损害),我不知道为什么这会破坏我的控制台 >var x = "http://www.foo.bar/q?name=%%this%%"; <undefined >x 它给了我 Console was cleared 没有清理控制台。现在在我的脚本控制台中,日志没有注册,我想知道发生了什么。99%的人肯定这与双百分号(%)有关 谁知道我做错了什么,或者更好的是,如何

只是在google chrome上做了一些JavaScript的东西(暂时不想在其他浏览器上尝试,以防这真的会造成损害),我不知道为什么这会破坏我的控制台

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

Console was cleared
没有清理控制台。现在在我的脚本控制台中,日志没有注册,我想知道发生了什么。99%的人肯定这与双百分号(%)有关

谁知道我做错了什么,或者更好的是,如何修复控制台


编辑:感觉很傻,但我已经检查了日志。。。这就是控制台没有清除的原因。

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

http://example.com/%
http://%%%
http://ab%
http://%ab
http://%zz
然而,不仅仅是百分比符号的出现破坏了Chrome控制台,因为当我们输入以下格式良好的URL时,控制台会继续正常工作并生成可点击的链接

http://ab%20cd
此外,字符串
http://%
http://%
也将正确打印,因为除非
http://
后面至少有3个字符,否则Chrome不会自动链接URL链接字符串

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

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

实际上,如果在格式错误的URL上运行
decodeURI
,您会看到相同的错误(即
decodeURI(
)http://example.com/%“)
)正在打印到控制台:

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

于是,我打开了网址
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]);
谢天谢地,一旦该选项卡关闭,中断的控制台问题不会持续,并且不会影响其他选项卡

更新:

显然,如果选中“保留日志”,该问题可能会在多个选项卡之间持续并重新启动。如果您遇到此问题,请取消选中此选项

更新2:


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

无法复制。铬39.复制于此:。Chrome版本39.0.2171.95M(64位)我想我已经掌握了一些东西!请参阅:您可以在控制台中使用类似“printf”的格式。尝试
console.log(“%s有%d个点”,“Sam”,100)。我认为这可能是一个事实的组合,即它试图混合%格式,同时试图将url格式设置为中的可单击链接console@AlexanderO玛拉:你搞定了!Chrome需要3个以上的字符才能在控制台中显示为链接<代码>'http://a'
'http://ab“
不会显示为可单击的链接(即使它们可能有效)<代码>'http://abc“
是一个可单击的链接。所以,
'http://a%'
是有效的,但是
'http://ab%“
中断!这也意味着
'http://%a'
起作用,而
'http://%ab'
中断。我的控制台问题在选项卡/新窗口中持续存在。这其实很讨厌。另外,我不确定这是否一定是正确的答案,但我现在将标记它,因为您确实提供了一种将该字符串记录到控制台的方法。有人知道我如何重置控制台吗?仍然得到“控制台被清除”和没有被清除@user2879041嗯,这很奇怪,不是给我的。它会在重启期间持续存在吗?@user2879041:也许Chrome没有完全关闭?一些Chrome网络应用不能在后台运行吗?哇,我不是很聪明。。。我已经查过了。。。很抱歉everyone@user2879041很高兴知道!为了帮助未来的读者,我在我的答案中添加了一个非此项。
var x = "http://example.com/%";
console.log([x]);