Я пытаюсь регистрировать ошибки JavaScript на продуктивном сайте. До сих пор это работало довольно хорошо со следующим кодом, включенным в сайт:
function catcherr(errorMessage, url, line) {
var parameters = "msg=" + escape(errorMessage)
+ "&url=" + escape(url)
+ "&line=" + escape(line);
new Image().src = "/error.gif?" + parameters;
return false;
};
window.onerror = catcherr;
Я пытаюсь добавить трассировку стека к ошибкам, чтобы получить больше информации. Это в основном работает со следующей идеей, включенной в функцию выше:
try { i.dont.exist += 0; } // does not exist - that's the point
catch (e)
{
if (e.stack) // Firefox
{
// do some stuff
Я использую jquery, простой пример:
<script type="text/javascript">
jQuery(document).ready(function() {
p.foo += 1; // this should throw an error
// do stuff
});
</script>
Самое смешное, что когда у меня возникает ошибка внутри «готовой» функции jquery, часть «try {i.dont.exist + = 0;}» больше не генерирует никаких исключений, и двигатель останавливается без любая ошибка
В приведенном выше примере с расширением catcherr следующим образом, только «1» получает предупреждение:
function catcherr(errorMessage, url, line) {
try { alert(1); i.dont.exist += 0; alert(4);} catch(e) { alert(5);}
alert(2);
var parameters = "msg=" + escape(errorMessage)
// ...
}
У кого-нибудь есть идея, почему это происходит, когда в функции «ready» jquery возникает ошибка?