Я хотел бы отлавливать каждую неопределенную ошибку в функции. Есть ли глобальная возможность обработки ошибок в JavaScript? Вариант использования - перехват вызовов функций из flash, которые не определены.
javascript
dom-events
Брайан Томпсетт - 汤 莱恩
источник
источник
Ответы:
Помогает ли это вам:
Я не уверен, как он обрабатывает ошибки Flash, хотя ...
Обновление: в Opera это не работает, но я сейчас взламываю Dragonfly, чтобы посмотреть, что получится. Предложение о взломе Dragonfly пришло из этого вопроса:
Мимика Окно. Ошибка в Opera с использованием JavaScript
источник
window.onerror = function() { alert(42) };
теперь код в ответе:window.onerror = function() { alert("Error caught"); };
не переопределить, я все еще не уверен ..Как поймать необработанные ошибки Javascript
Назначьте
window.onerror
событие обработчику событий, например:Как прокомментировано в коде, если возвращаемое значение
window.onerror
равно,true
то браузер должен отключить отображение диалогового окна с предупреждением.Когда срабатывает событие window.onerror?
В двух словах, событие возникает, когда либо 1.) существует неперехваченное исключение, либо 2.) происходит ошибка времени компиляции.
Браузеры, поддерживающие window.onerror
Скриншот:
Пример приведенного выше кода ошибки в действии после добавления этого на тестовую страницу:
Пример для сообщения об ошибках AJAX
JSFiddle:
https://jsfiddle.net/nzfvm44d/
Ссылки:
источник
throw
сделано вручную. stackoverflow.com/questions/15036165/…сложная обработка ошибок
Если ваша обработка ошибок очень сложна и, следовательно, может выдать саму ошибку, полезно добавить флаг, указывающий, что вы уже находитесь в «errorHandling-Mode». Вот так:
В противном случае вы можете оказаться в бесконечном цикле.
источник
handleError
метода.Попробуйте Atatus, который обеспечивает расширенное отслеживание ошибок и мониторинг реальных пользователей для современных веб-приложений.
Позвольте мне объяснить, как получить трассировки стека, которые достаточно полны во всех браузерах.
Обработка ошибок в JavaScript
Современные Chrome и Opera полностью поддерживают проект спецификации HTML 5 для ErrorEvent и
window.onerror
. В обоих этих браузерах вы можете либо использоватьwindow.onerror
, либо правильно связать с событием error:К сожалению, Firefox, Safari и IE все еще существуют, и мы также должны их поддерживать. Поскольку трассировка стека недоступна,
window.onerror
нам нужно проделать немного больше работы.Оказывается, что единственное, что мы можем сделать, чтобы получить трассировки стека от ошибок, - это обернуть весь наш код в
try{ }catch(e){ }
блок, а затем посмотретьe.stack
. Мы можем несколько упростить процесс с помощью функции wrap, которая принимает функцию и возвращает новую функцию с хорошей обработкой ошибок.Это работает. Любая функция, которую вы переносите вручную, будет иметь хорошую обработку ошибок, но в большинстве случаев оказывается, что мы можем сделать это автоматически.
Изменяя глобальное определение
addEventListener
так, чтобы оно автоматически оборачивало обратный вызов, мы можем автоматически вставлятьtry{ }catch(e){ }
вокруг большей части кода. Это позволяет существующему коду продолжать работать, но добавляет высококачественное отслеживание исключений.Нам также нужно убедиться, что
removeEventListener
продолжает работать. На данный момент это не так, потому что аргумент кaddEventListener
изменен. Опять же, нам нужно только исправить это наprototype
объекте:Передайте данные об ошибках в свой бэкэнд
Вы можете отправить данные об ошибке с помощью тега изображения следующим образом
Отказ от ответственности: я веб-разработчик на https://www.atatus.com/ .
источник
http://yourserver.com
) для получения и хранения. Если вы выбираете atatus.com , вам не нужно ничего делать. Просто включите две строки сценария на своей странице.Кажется, что
window.onerror
не обеспечивает доступ ко всем возможным ошибкам. В частности, он игнорирует:<img>
ошибки загрузки (ответ> = 400).<script>
ошибки загрузки (ответ> = 400).window.onerror
неизвестным образом (jquery, angular и т. д.).Вот начало сценария, который улавливает многие из этих ошибок, так что вы можете добавить более надежную отладку в ваше приложение во время разработки.
Это можно использовать так:
Полный сценарий имеет реализацию по умолчанию, которая пытается распечатать получитаемую «отображаемую» версию объекта / ошибки, которую он получает. Может быть использован для вдохновения для обработчика ошибок для конкретного приложения. Реализация по умолчанию также сохраняет ссылку на последние 100 объектов ошибок, поэтому вы можете просмотреть их в веб-консоли после того, как они произошли, например:
Примечание. Это работает путем переопределения методов в нескольких браузерах / собственных конструкторах. Это может иметь непредвиденные побочные эффекты. Тем не менее, его было полезно использовать во время разработки, чтобы выяснить, где происходят ошибки, для отправки журналов в сервисы, такие как NewRelic или Sentry, во время разработки, чтобы мы могли измерять ошибки во время разработки и при подготовке, чтобы мы могли отлаживать то, что происходит в более глубокий уровень. Затем он может быть отключен в производстве.
Надеюсь это поможет.
источник
источник
Следует также сохранить ранее связанный обратный вызов onerror
источник
Если вам нужен унифицированный способ обработки как необработанных ошибок, так и необработанных отклонений обещаний, вы можете взглянуть на необработанную библиотеку .
РЕДАКТИРОВАТЬ
Слушает окно. необработанный отказ в дополнение к window.onerror.
источник
Я бы порекомендовал дать Trackjs попробовать.
Это регистрация ошибок как сервис.
Это удивительно просто настроить. Просто добавьте одну строку <script> на каждую страницу и все. Это также означает, что удалить его будет невероятно просто, если вы решите, что он вам не нравится.
Есть и другие сервисы, такие как Sentry (с открытым исходным кодом, если вы можете разместить свой собственный сервер), но он не делает то, что делает Trackjs. Trackjs записывает взаимодействие пользователя между его браузером и вашим веб-сервером, так что вы можете фактически отслеживать шаги пользователя, которые привели к ошибке, а не просто ссылку на файл и номер строки (и, возможно, трассировку стека).
источник
Вы слушаете событие onerror, назначая функцию для window.onerror:
источник