Функция window.onerror обрабатывается по-разному в разных браузерах - PullRequest
2 голосов
/ 16 ноября 2011

Я пытаюсь реализовать простое ведение журнала js.После тестирования кода ниже я обнаружил, что он ведет себя по-разному в зависимости от браузера.

Изменение возврата на true, false или удаление возврата имеют разные эффекты.Кто-нибудь знает, как этого избежать.Я хочу быть в состоянии отлавливать ошибки и регистрировать их, но я также хочу поддерживать обработку ошибок браузера.

window.onerror = function () {
    alert('error caught!');
    // Basically here I fire a Google Analytics force event track call to log the error

    return false;
}

В качестве альтернативы, если кто-то знает лучший способ регистрации ошибок js на стороне клиента ...

Chrome - возвращает false - показывает ошибку в консоли Safari - возвращает false - не показывает ошибкуconsole

** Достаточно забавное переключение, чтобы вернуть true, дает вам совершенно противоположные результаты.Не уверен насчет IE и т. Д.

1 Ответ

1 голос
/ 18 ноября 2011

Если вам нужен номер строки ошибки в IE, я почти уверен, что ваш единственный вариант - window.onerror, потому что, когда IE выдает исключение в блоке try...catch, он не содержит номер строки. Тем не менее, каждый браузер имеет свою реализацию исключения, сгенерированного в блоке try...catch - некоторые обеспечивают полную трассировку стека, которую вы не можете получить из window.onerror ни в одном браузере. Я не знал о специфической причуде, которую вы обнаружили, но я знаю, что обработка исключений - почти самая непоследовательная вещь во всех браузерах, и она даже не остается неизменной в каждом браузере; если я правильно помню, Opera изменила свой класс исключений в Opera 10 и сломала что-то, что я написал для анализа исключения в Opera.

Достаточно сказать, что вы обнаружили ад, который обрабатывает исключения в JavaScript, и единственный способ обойти это - обнаружение и ветвление браузера соответственно, чтобы сделать правильную вещь для каждого браузера. Я искал хорошую библиотеку, чтобы иметь дело с исключениями в JavaScript и абстрагироваться от моих отличий в браузере, но пока я не нашел ее.

...