只是在谷歌浏览器中做一些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.
编辑:感觉非常愚蠢,但我保留了日志检查...这就是控制台没有清除的原因。
答案 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开始,此问题已修复。