And*_*dyS 15 javascript google-chrome onerror
我们使用window.onerror来捕获未处理的异常(为开发团队记录它们,并显示友好的用户警报).最近我们注意到,在谷歌浏览器中,如果错误消息超过一定长度就会被截断,并且文本" ...<omitted>..."被神秘地添加到错误消息中.
以下代码将演示此功能(在Chrome版本33.0.1750中).我想知道是否有其他人有这个问题?
<html>
<head>
<script type="text/javascript">
window.onerror = function (errorMsg, url, lineNumber) {
alert('Error: ' + errorMsg);
}
var throwError = function () {
throw new Error(
'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' +
'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' +
'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' +
'Some text gets truncated before this point!');
}
</script>
</head>
<body>
<h1>Hello World</h1>
<input type="button" onclick="throwError()" value="Throw uncaught error!" /><br /><br />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
And*_*dyS 24
我找到了一个运作良好的解决方案.
Chrome实现了新的HTML标准,其中2个新参数已添加到onerror处理程序,即:colNumber和错误对象(包括堆栈跟踪).
看到:
可以通过error.message下面的代码示例访问完整的错误消息.这是第一个参数的副本message,似乎Chrome决定截断message.不知道为什么他们不得不打破一些有效的东西... :-(
IE和FireFox(截至目前的版本:11.0.9600和26.0)还没有实现新的5参数标准,所以代码允许这样做.
希望这有助于某人!
代码示例返回完整的错误消息:
<html>
<head>
<script type="text/javascript">
//Chrome passes the error object (5th param) which we must use since it now truncates the Msg (1st param).
window.onerror = function (errorMsg, url, lineNumber, columnNumber, errorObject) {
var errMsg;
//check the errorObject as IE and FF don't pass it through (yet)
if (errorObject && errorObject !== undefined) {
errMsg = errorObject.message;
}
else {
errMsg = errorMsg;
}
alert('Error: ' + errMsg);
}
var throwError = function () {
throw new Error(
'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' +
'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' +
'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' +
'Text does not get truncated! :-)');
}
</script>
</head>
<body>
<h1>Hello World</h1>
<input type="button" onclick="throwError()" value="Throw uncaught error!" /><br /><br />
</body>
Run Code Online (Sandbox Code Playgroud)