Chrome会截断错误消息,并在window.onerror </ignored>中添加“<ignored>”

时间:2014-03-05 13:44:21

标签: 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>

2 个答案:

答案 0 :(得分:24)

我找到了一个效果很好的解决方案。

Chrome实施新的HTML标准,其中2个新参数已添加到 onerror 处理程序,即: colNumber 错误对象< / strong>(包括堆栈跟踪)。

请参阅:

根据下面的代码示例,可以通过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>

答案 1 :(得分:3)

这是Chrome中的已知问题,已被其他人注意到:https://github.com/angular/angular.js/issues/5568

我认为没有解决方法,但已经报告了错误:http://crbug.com/331971