这个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开始,这个问题就解决了。