这个JavaScript打破了控制台?

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

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

在X(和进入)后,控制台停止工作…我重新启动铬,现在当我做一个简单的

 console.clear(); 

这是给我的

 Console was cleared 

而不是清除控制台。 现在在我的脚本console.log的不注册,我想知道是怎么回事。 99%确定它与双百分号(%%)有关。

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

这个问题的bug报告已经在这里提交。

编辑:感觉很笨,但我有保存日志检查…这就是为什么控制台不清除。

正如在评论中所讨论的那样,实际上有很多不同的方法来构build一个导致这个问题的string,在大多数情况下,没有必要有两个百分号。

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

但是,当我们input以下格式正确的url时,不仅仅是出现打破Chrome控制台的百分比符号,控制台还会继续正常工作并生成可点击的链接。

 http://ab%20cd 

此外,stringhttp://%http://%%也将正确打印,因为除非http://后面跟着至less3个字符,否则Chrome将不会自动链接URL链接string。

从这里我假设这个问题必须在连接控制台中的URLstring的过程中,可能在解码格式不正确的URL的过程中。 我记得JavaScript函数decodeURI会在给出格式不正确的URL时抛出exception,而且Chrome的开发人员工具主要是用JavaScript编写的,这是否会成为显然会使开发人员控制台崩溃的问题?

为了testing这个理论,我通过命令链接运行了Chrome,查看是否有任何错误被logging。

事实上,如果你在错误的URL(例如decodeURI('http://example.com/%') )上运行decodeURI ,你会看到相同的错误:

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

所以,我在Chrome中打开了URL chrome-devtools://devtools/bundled/devtools.js ,并在第683行find了以下内容。

 {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)而没有任何错误检查,从而抛出exception并使开发者控制台崩溃。

这个问题的一个真正的解决方法是将error handling添加到Chrome控制台代码中,但是与此同时,避免这个问题的一种方法是将string包装成像数组这样的复杂数据types,以防止在日志logging时parsing。

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

值得庆幸的是,一旦选项卡closures,控制台问题不会持续,并且不会影响其他选项卡。

更新:

显然,如果保留日志被选中,问题可以在选项卡上保留并重新启动。 如果您遇到此问题,请取消选中此项。

更新2:

从Chrome 40开始,这个问题就解决了。