Ответ 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>