Pull to refresh

Comments 21

UFO just landed and posted this here

А "номер счётчика" вы как, в коде всегда хардкодите? Или при build-е как-то вставляете?

Да, захардкодить, при сборке или с помощью шаблонизатора.
//...
var counterId = '{{MY_COUNTER_ID}}';
//...

Отличная статья, мы тоже именно так делаем!


Несколько дополнений:


  1. Кроме подписки на ошибки еще стоит подписаться на непойманные промисы через onunhandledrejection.


  2. Саму подписку лучше делать через window.addEventListener, а то какая-нибудь сторонняя библиотека может переопределить window.onerror.


  3. Чтобы подписаться сразу и на ошибки и на промисы есть библиотечка uncaught.


  4. URL для метрики можно не конструировать вручную, а использовать метод hit из API счетчика, передавая данные в params.


  5. Ну и справедливости ради, у Google Analytics есть готовый механизм сбора ошибок.
1. Малая поддержка в браузерах, только Chrome.
2. У IE8 нет addEventListener. А так, конечно, лучше addEventListener.
3. Зависимость, которая тянет за собой дополнительный код. Код сбора ошибок инлайнится перед всеми скриптами и должен быть лаконичным.
4. Про метод знаю, но реализация в статье не зависит от кода отслеживания Метрики.
5. Метрике на заметку. :)
  1. Малая поддержка в браузерах, только Chrome.

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

  1. Про метод знаю, но реализация в статье не зависит от кода отслеживания Метрики.

На самом деле вы делаете еще хуже. Потому что названия урлов это часть приватного API, и Метрика может его поменять и все вам сломать.


А метод hit задокуметирован и поддерживается, а значит без предупреждения не изменится.

Не совсем так. Этот урл можно увидеть у картинки, которая находится в теге NOSCRIPT в коде установки Метрики. Урл не поменяется, с таким кодом Метрика установлена на многих сайтах.
<!-- 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, например.

Не хочу начинать этот холивар, но… IE8? Серьёзно?
Конечно. Вы можете не поддерживать IE8, но о наличии ошибок в нём знать надо. Не говоря уже о том, что скрипт для сбора ошибок, генерирующий ошибки – что-то неправильное.
Денис, привет!

Я пару лет назад даже сервис поверх api метрики писать начал http://jserrs.com, но как-то всё застопорилось :-)
Привет! Посмотрел, понравилась идея пробрасывать версию js-кода сайта.

К слову, может быть полезно также отслеживать не обработанные ошибки в промисах, с помощью события unhandledrejection. Работает правда тольо в Хроме и производных.

судя по всему закралась ошибка.
var counterId = 12345, 
        siteInfo = {},
        pointer = siteInfo; // ТУТ ЗАПЯТАЯ
        path = [.....
А что насчёт производительности сайта? Две метрики, да и ещё перед всеми скриптами (т.е. многовероятно, что в самом начале страницы) мне кажется приведут к печальным результатам
Скрипт метрики для ошибок не интегрируется на сайт, запрос отправляется в метрику непосредственно при ошибке, без подключения скрипта.
Sign up to leave a comment.

Articles