use*_*041 46 javascript browser google-chrome
只是在谷歌浏览器中做一些JavaScript的东西(现在不想在其他浏览器中尝试,以防这真的造成真正的损害),我不知道为什么这似乎打破了我的控制台.
>var x = "http://www.foo.bar/q?name=%%this%%";
<undefined
>x
Run Code Online (Sandbox Code Playgroud)
在x(并输入)后,控制台停止工作...我重新启动了chrome,现在我做了一个简单的操作
console.clear();
Run Code Online (Sandbox Code Playgroud)
它给了我
Console was cleared
Run Code Online (Sandbox Code Playgroud)
而不是清理控制台.现在在我的脚本console.log中没有注册,我想知道发生了什么.99%肯定它与双百分号(%%)有关.
任何人都知道我做错了什么或更好,如何修复控制台?
编辑:感觉非常愚蠢,但我保留了日志检查...这就是控制台没有清除的原因.
Ale*_*ara 51
正如评论中所讨论的,实际上有许多不同的方法来构造导致此问题的字符串,并且在大多数情况下不必有两个百分号.
http://example.com/%
http://%%%
http://ab%
http://%ab
http://%zz
Run Code Online (Sandbox Code Playgroud)
但是,不仅仅存在百分号会破坏Chrome控制台,因为当我们输入以下格式正确的URL时,控制台将继续正常工作并生成可点击的链接.
http://ab%20cd
Run Code Online (Sandbox Code Playgroud)
此外,字符串http://%,并且http://%%也将正确打印,因为Chrome浏览器不会自动链接一个网址链接字符串,除非http://后面至少3个字符.
从这里我假设问题必须是在控制台中链接URL字符串的过程中,可能是在解码格式错误的URL的过程中.我记得decodeURI如果给出格式错误的URL,JavaScript函数将抛出异常,并且由于Chrome的开发人员工具主要是用JavaScript编写的,这可能是显然崩溃了开发人员控制台的问题吗?
为了测试这个理论,我通过命令链接运行Chrome,以查看是否记录了任何错误.
实际上,如果您运行decodeURI格式错误的URL(即decodeURI('http://example.com/%')),您将看到的相同错误正在打印到控制台:
[4810:1287:0107/164725:错误:控制台(683)]"未捕获URIError: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)
Run Code Online (Sandbox Code Playgroud)
正如我们所看到的,decodeURI(url)在没有任何错误检查的情况下调用URL,从而抛出异常并使开发人员控制台崩溃.
对此问题的真正修复将来自向Chrome控制台代码添加错误处理,但与此同时,避免此问题的一种方法是将字符串包装在复杂数据类型(如数组)中以防止在记录时进行解析.
var x = "http://example.com/%";
console.log([x]);
Run Code Online (Sandbox Code Playgroud)
值得庆幸的是,一旦选项卡关闭,破坏的控制台问题就不会持续存在,并且不会影响其他选项卡.
更新:
显然,如果选中"保留日志",则问题可能会持续显示并重新启动.如果您遇到此问题,请取消选中此项.
更新2:
从Chrome 40开始,此问题已修复.
| 归档时间: |
|
| 查看次数: |
1476 次 |
| 最近记录: |