这个JavaScript破坏了控制台吗?
Did this JavaScript break the console?
只是在 google chrome 中做一些 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.
编辑:感觉很蠢,但我检查了保留日志...这就是控制台未清除的原因。
正如评论中所讨论的,实际上有许多不同的构造字符串的方法会导致此问题,并且在大多数情况下不需要两个百分号。
http://example.com/%
http://%%%
http://ab%
http://%ab
http://%zz
但是,破坏 Chrome 控制台的不仅仅是百分号的存在,因为当我们输入以下格式正确的 URL 时,控制台继续正常工作并生成可点击 link.
http://ab%20cd
此外,字符串 http://%
和 http://%%
也将正确打印,因为 Chrome 不会自动-link 和 URL-link 字符串,除非 http://
后跟至少 3 个字符。
从这里我假设问题一定是在控制台中 linking 一个 URL 字符串的过程中,可能是在解码格式错误的 URL 的过程中。我记得 JavaScript 函数 decodeURI
会在给定格式错误的 URL 时抛出异常,并且由于 Chrome 的开发工具主要是用 JavaScript 编写的,这可能是导致开发者控制台崩溃的问题吗?
为了验证这个理论,我 运行 Chrome 通过命令 link,查看是否记录了任何错误。
事实上,如果您 运行 decodeURI
在格式错误的 URL(即 decodeURI('http://example.com/%')
)上打印到控制台,您会看到同样的错误:
[4810:1287:0107/164725:ERROR:CONSOLE(683)] "Uncaught URIError: URI malformed", source: chrome-devtools://devtools/bundled/devtools.js (683)
于是,我在Chrome中打开了URLchrome-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)
正如我们所见,decodeURI(url)
在 URL 上被调用,没有任何错误检查,因此抛出异常并使开发者控制台崩溃。
此问题的真正解决方法是向 Chrome 控制台代码添加错误处理,但与此同时,避免此问题的一种方法是将字符串包装在复杂的数据类型中,例如记录时防止解析的数组。
var x = "http://example.com/%";
console.log([x]);
值得庆幸的是,关闭选项卡后控制台损坏问题不会持续存在,也不会影响其他选项卡。
更新:
显然,如果选中保留日志,该问题可能会跨选项卡持续存在并重新启动。如果您遇到此问题,请取消选中此选项。
更新二:
自 Chrome 40 起,此问题已修复。
只是在 google chrome 中做一些 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.
编辑:感觉很蠢,但我检查了保留日志...这就是控制台未清除的原因。
正如评论中所讨论的,实际上有许多不同的构造字符串的方法会导致此问题,并且在大多数情况下不需要两个百分号。
http://example.com/%
http://%%%
http://ab%
http://%ab
http://%zz
但是,破坏 Chrome 控制台的不仅仅是百分号的存在,因为当我们输入以下格式正确的 URL 时,控制台继续正常工作并生成可点击 link.
http://ab%20cd
此外,字符串 http://%
和 http://%%
也将正确打印,因为 Chrome 不会自动-link 和 URL-link 字符串,除非 http://
后跟至少 3 个字符。
从这里我假设问题一定是在控制台中 linking 一个 URL 字符串的过程中,可能是在解码格式错误的 URL 的过程中。我记得 JavaScript 函数 decodeURI
会在给定格式错误的 URL 时抛出异常,并且由于 Chrome 的开发工具主要是用 JavaScript 编写的,这可能是导致开发者控制台崩溃的问题吗?
为了验证这个理论,我 运行 Chrome 通过命令 link,查看是否记录了任何错误。
事实上,如果您 运行 decodeURI
在格式错误的 URL(即 decodeURI('http://example.com/%')
)上打印到控制台,您会看到同样的错误:
[4810:1287:0107/164725:ERROR:CONSOLE(683)] "Uncaught URIError: URI malformed", source: chrome-devtools://devtools/bundled/devtools.js (683)
于是,我在Chrome中打开了URLchrome-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)
正如我们所见,decodeURI(url)
在 URL 上被调用,没有任何错误检查,因此抛出异常并使开发者控制台崩溃。
此问题的真正解决方法是向 Chrome 控制台代码添加错误处理,但与此同时,避免此问题的一种方法是将字符串包装在复杂的数据类型中,例如记录时防止解析的数组。
var x = "http://example.com/%";
console.log([x]);
值得庆幸的是,关闭选项卡后控制台损坏问题不会持续存在,也不会影响其他选项卡。
更新:
显然,如果选中保留日志,该问题可能会跨选项卡持续存在并重新启动。如果您遇到此问题,请取消选中此选项。
更新二:
自 Chrome 40 起,此问题已修复。