Глобальный обработчик исключений javascript (в Chrome)

Как перезаписать глобальный обработчик исключений в javascript, чтобы он стал обработчиком верхнего уровня для всех неперехваченных исключений?

РЕДАКТИРОВАТЬ: window.onerror не работал, код:

<HTML>
 <HEAD>
<script language='javascript'>
    window.onerror = function (em, url, ln) {
        alert(em + ", " + url + ", " + ln);
        return false;
    }

    function fGo() {
        try
        {
            var a = b; // error here : b not defined
        }
        catch (e)
        {
            throw e;
        }
    }
</script>
 </HEAD>
 <BODY>
    <button onclick='fGo()'>GO</button>
 </BODY>
</HTML>

Кстати, тестирую на хроме. Консоль разработчика регистрирует необработанное исключение, но alert() в window.onerror не появляется.


person Jack    schedule 05.03.2010    source источник


Ответы (3)


С 2013 года Chrome поддерживает расширение window.onerror. (у меня комментарии к версии 25 подразумевают и более ранние версии)

Что я сделал, так это обернул JQuery с помощью каррирования, чтобы создать прокси, который всегда выполняет try...catch в функциях JQuery.

Я использую его в www.js-analytics.com, однако решение подходит только для сценариев JQuery.

До 2013 года Google Chrome не поддерживал window.onerror, по-видимому, он не был реализован в WebKit.

person Morten    schedule 07.03.2010
comment
Вот так. И WebKit недавно добился некоторого прогресса в исправлении этой ошибки. Это еще не исправлено, но вот ссылка на обновления: bugs.webkit.org/ show_bug.cgi?id=8519 - person Mariano Desanze; 13.09.2010
comment
Согласно groups.google.com/group/ js-test-driver/browse_thread/thread/ это должно быть исправлено в Chrome 10 - person Korny; 15.04.2011
comment
Я использую Chrome 14 (последняя версия), и window.onerror работает! - person Nick B; 01.10.2011

Поддержка Chrome для window.onerror

  • Я полагаю, что поддержка началась в Chrome v10 (Chromium Issue 7771) , но похоже, что "полная" поддержка с поддержкой CORS была решена в Chrome 30+ (Chromium Issue 159566)
  • caniuse.com в настоящее время не отслеживает эту функцию JS (GitHub Issue 11999). . чтобы добавить поддержку по этой проблеме, войдите в GitHub и "отреагируйте", поставив "большой палец вверх" на исходную публикацию (не +1 в комментариях).

Текущая документация Google для window.onerror

person George 2.0 Hope    schedule 19.12.2018

Возможно, вы ищете window.onerror Не уверен, доступен ли он на все браузеры.

person peller    schedule 05.03.2010
comment
Последние версии Safari (и Chrome) поддерживают его. Для справки, я подтвердил в Safari 5.1 и Chrome 14, оба в Mac OS X. Не знаю, когда они наконец были добавлены в эти браузеры, но теперь они доступны во всех основных браузерах. - person Nick B; 01.10.2011