Chrome обрезает сообщения об ошибках и добавляет "<omitted>" в window.onerror

Мы используем window.onerror для обнаружения необработанных исключений (для регистрации их для команды разработчиков и отображения дружественного пользовательского предупреждения). Недавно мы заметили, что в Google Chrome сообщение об ошибке было усечено, если оно было выше определенной длины, а текст "...<omitted>..." был загадочно добавлен в сообщение об ошибке.

Ниже приведен код ниже (в Chrome ver 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>

Ответы

Ответ 1

Я нашел решение, которое хорошо работает.

Chrome реализует новый стандарт HTML, в который добавлены два новых параметра для обработчика 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>