2013-09-30 3 views
14

Я изучаю возможность автоматического обнаружения ошибок на странице через Javascript. Я нашел несколько вопросов, в которых ответ позволяет поймать компиляцию Javascript и ошибки времени выполнения по всему миру через window.onerror, но в ответах не упоминаются другие типы ошибок, отличных от Javascript, которые часто сообщаются в консолях ошибок браузера. Я в первую очередь интересуюсь сетевыми ошибками (недопустимыми ошибками URI, ошибками SSL, ошибками HTTP, таймаутами) и ошибками интерпретации ресурсов (несоответствие типов, приводящее к прерыванию интерпретации ресурса, анализу ошибок на загружаемых ресурсах и т. Д.).Есть ли глобальный подход для улавливания сетевых ошибок в javascript

Я проверил метод performance.getEntries, но я сбит с толку, чтобы найти, что это, кажется, не содержат сетевые запросы, которые привели к ошибкам (я проверил только в Chrome 29 ...)

мне не нужен полная совместимость с перекрестным браузером. Пока это работает на некоторых браузерах и не нарушает других, все в порядке.

+0

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

ответ

2

Обработчик window.onerror хорошо работает в Chrome 13+, Firefox 6.0+, Internet Explorer 5.5+, Opera 11.60+ и Safari 5.1+. Уже есть really good answer on StackOverflow, который содержит много информации об этом.

Насколько другие элементы (например, изображения) обеспокоены, JQuery предоставляет .error() способ прикрепить обработчик события ошибки, чтобы предупредить пользователя, когда изображение или внешний скрипт не загрузится. Если вы не можете использовать jQuery, то другой вариант - предварительно загрузить все изображения/внешние ресурсы с помощью XMLHttpRequest и прослушать status (код ответа HTTP) запроса (ничего, кроме 200 OK или 304 Not Modified - это то, что вы хотите вернуть ошибка). Недостатком этого является то, что, поскольку обработчики событий и т. Д. Должны быть прикреплены до полной загрузки страницы, любой, у кого отключен JavaScript, будет смотреть на фрагментированную, возможно, пустую страницу.

Неверные URI и ошибки HTTP лучше всего обрабатываются на стороне сервера. Хорошо сформированный файл .htaccess, объединенный с Apache mod_rewrite (или эквивалент), может обеспечить много амортизации для плохих запросов к серверу.

+0

К сожалению, подход, упомянутый во втором абзаце, вообще не является глобальным, вам придется переписать весь сайт. Недействительные URI нельзя обрабатывать на стороне сервера, так как URI недействителен и никогда не будет отправлен на сервер. Ошибки HTTP можно отслеживать, если вы владеете сервером, но что, если вы хотите проверить наличие ошибок, загружаете сторонние ресурсы ... –

+1

@FabioBeltramini: Вам не нужно переписывать весь сайт. Вам просто нужно добавить его скриптом, который перехватывает все вызовы для собственных функций ([пример] (http://stackoverflow.com/questions/15768369/custom-xmlhttprequest-prototype-open)) и отслеживает все добавленные ресурсы к DOM. Вы можете динамически добавлять обработчики ошибок, не касаясь вашего кода. – Bergi

+0

Я не думаю, что вам вообще нужно jQuery. Вы можете прослушивать события ошибок на