Comments 21
А "номер счётчика" вы как, в коде всегда хардкодите? Или при build-е как-то вставляете?
Отличная статья, мы тоже именно так делаем!
Несколько дополнений:
Кроме подписки на ошибки еще стоит подписаться на непойманные промисы через onunhandledrejection.
Саму подписку лучше делать через
window.addEventListener
, а то какая-нибудь сторонняя библиотека может переопределитьwindow.onerror
.
Чтобы подписаться сразу и на ошибки и на промисы есть библиотечка uncaught.
URL для метрики можно не конструировать вручную, а использовать метод hit из API счетчика, передавая данные в
params
.
- Ну и справедливости ради, у Google Analytics есть готовый механизм сбора ошибок.
2. У IE8 нет addEventListener. А так, конечно, лучше addEventListener.
3. Зависимость, которая тянет за собой дополнительный код. Код сбора ошибок инлайнится перед всеми скриптами и должен быть лаконичным.
4. Про метод знаю, но реализация в статье не зависит от кода отслеживания Метрики.
5. Метрике на заметку. :)
- Малая поддержка в браузерах, только Chrome.
Сейчас вы не получаете этой информации вообще. А могли бы получать хотя бы от тех браузеров, которые ее предоставляют.
- Про метод знаю, но реализация в статье не зависит от кода отслеживания Метрики.
На самом деле вы делаете еще хуже. Потому что названия урлов это часть приватного API, и Метрика может его поменять и все вам сломать.
А метод hit задокуметирован и поддерживается, а значит без предупреждения не изменится.
<!-- Yandex.Metrika counter -->
<script type="text/javascript"> (function (d, w, c) { (w[c] = w[c] || []).push(function() { try { w.yaCounter43574444 = new Ya.Metrika({ id:43574444, clickmap:true, trackLinks:true, accurateTrackBounce:true }); } catch(e) { } }); var n = d.getElementsByTagName("script")[0], s = d.createElement("script"), f = function () { n.parentNode.insertBefore(s, n); }; s.type = "text/javascript"; s.async = true; s.src = "https://mc.yandex.ru/metrika/watch.js"; if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f, false); } else { f(); } })(document, window, "yandex_metrika_callbacks");</script>
<noscript><div><img src="https://mc.yandex.ru/watch/43574444" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter -->
Параметра site-info
, который вы используете, там нет.
Так что сломается, если он внезапно станет siteInfo, например.
Я пару лет назад даже сервис поверх api метрики писать начал http://jserrs.com, но как-то всё застопорилось :-)
К слову, может быть полезно также отслеживать не обработанные ошибки в промисах, с помощью события unhandledrejection. Работает правда тольо в Хроме и производных.
var counterId = 12345,
siteInfo = {},
pointer = siteInfo; // ТУТ ЗАПЯТАЯ
path = [.....
Отслеживание js-ошибок с помощью Метрики