Регистрация ошибок клиентского JavaScript на сервере

StackOverflow https://stackoverflow.com/questions/119432

Вопрос

Я запускаю сайт ASP.NET, и у меня возникают проблемы с обнаружением некоторых ошибок JavaScript только при ручном тестировании.

Есть ли возможность перехватить все ошибки JavaScript на стороне клиента и зарегистрировать их на сервере, т.е.в журнале событий (через веб-сервис или что-то в этом роде)?

Это было полезно?

Решение

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

Вот пример из Использование XMLHttpRequest для регистрации ошибок JavaScript:

window.onerror = function(msg, url, line)
{
  var req = new XMLHttpRequest();
  var params = "msg=" + encodeURIComponent(msg) + '&url=' + encodeURIComponent(url) + "&line=" + line;
  req.open("POST", "/scripts/logerror.php");
  req.send(params);
};

Другие советы

Короткий ответ: Да, это возможно.

Более длинный ответ: Люди уже писали о том, как можно (хотя бы частично) решить эту проблему, написав собственный код.Однако обратите внимание, что существуют сервисы, которые, по-видимому, обеспечивают работу необходимого JS-кода во многих браузерах.Я нашел следующее:

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

Я только что реализовал регистрацию ошибок JavaScript на стороне сервера в рабочем проекте.Существует смесь устаревшего кода и нового кода, использующего jQuery.

Я использую комбинацию window.onerror и оборачиваем обработчики событий jQuery и функцию onready функцией обработки ошибок (см.: Отслеживание ошибок JavaScript:Почему window.onerror недостаточно).

  • window.onerror:перехватывает все ошибки в IE (и большинство ошибок в Firefox), но ничего не делает в Safari и Opera.
  • Обработчики событий jQuery:перехватывает ошибки событий jQuery во всех браузерах.
  • Готовая функция jQuery:перехватывает ошибки инициализации во всех браузерах.

Как только я обнаружил ошибку, я добавляю к ней дополнительные свойства (url, браузер и т. д.), а затем отправляю ее обратно на сервер с помощью ajax-вызова.

На сервере у меня есть небольшая страница, которая просто принимает опубликованные аргументы и выводит их в нашу обычную систему журналирования сервера.

Я хотел бы открыть исходный код для этого (как плагин jQuery).Если кому интересно дайте знать, это поможет убедить начальство!

Если вы используете Google Analytics, вы можете регистрировать ошибки JavaScript в событиях Google Analytics.

Посмотрите это приложение: http://siteapps.com/app/log_javascript_errors_with_ga-181

Надеюсь, поможет.

Также я рекомендую использовать Инструмент трассировки утилита, она поддерживает JavaScript и очень удобна для мониторинга JS.

Если вы хотите регистрировать ошибки на стороне клиента обратно на сервер, вам придется выполнить некоторую серверную обработку.Лучше всего было бы иметь веб-сервис, к которому вы можете получить доступ через JavaScript (AJAX), и вы передаете ему информацию журнала ошибок.

Не решает проблему на 100%, потому что, если проблема связана с веб-сервером, на котором размещен веб-сервис, с которым вы столкнулись, другим вариантом будет отправить информацию через стандартную страницу через строку запроса. Один из методов это делается посредством динамической генерации тегов изображений (которые затем удаляются), поскольку браузер пытается загрузить источник изображения.Однако он прекрасно справляется с междоменными вызовами JavaScript.Имейте в виду, что у вас проблемы, если у кого-то отключены изображения ;)

я использовал Ошибка приложения недавно, который фиксирует ошибки asp.net и JavaScript.

Потенциально вы могли бы выполнить Ajax-вызов на сервер с помощью метода try/catch, но это, вероятно, лучшее, что вы можете сделать.

Могу ли я предложить вместо этого модульное тестирование JavaScript?Возможно с JSUnit?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top