Ответы пользователя по тегу Яндекс.Метрика
  • Как модифицировать отложенную загрузку для Яндекс метрики?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    {
      let isYMLoaded = false;
    
      const loadYM = () => {
        if (isYMLoaded) return;
        isYMLoaded = true;
        setTimeout(() => {
          // Metrika code
          // ... 
        }, 0);
      }
    
      const eventNames = 'click,scroll,touchstart,mouseenter'.split(',');
    
      const handlerYM = () => {
        eventNames.forEach((name) => document.removeEventListener(name, handlerYM));
        loadYM();
      }
    
      if (!!~navigator.userAgent.indexOf('YandexMetrika')) {
        // Yandex
        loadYM();
      } else {
        // нормальный посетитель
        eventNames.forEach((name) => document.addEventListener(name, handlerYM));
      }
    }
    Ответ написан
    2 комментария
  • Как подключить Яндекс.Метрику в RequireJS?

    Только что тоже этим озадачился. Попробовал так, похоже, работает:

    1. в теле HTML остаётся только
    <noscript><div><img src="//mc.yandex.ru/watch/XXXXXX?ut=noindex" style="position:absolute; left:-9999px;" alt="" /></div></noscript>


    2. в конфиге require в paths дописываем путь для скрипта метрики (название "yametrika" я преложил, вы можете назвать сей "модуль" как угодно): "yametrika": "//mc.yandex.ru/metrika/watch"

    3. в первом загружаемом модуле нужно указать этот "yametrika" в зависимостях, но не обязательно назначать ему ответную переменную:
    define([ 'backbone','jquery', ... ,"yametrika"], function(...){}


    4. в функции, которая там вызывается вставить инициализацию объекта Метрики:
    try {
    	window.yaCounterXXXXXX = new Ya.Metrika(
    		{
    			id:XXXXXX
    			, trackHash:true
    			, ut:"noindex"
    		}
    	);
    } catch(e) { }


    Всё, дальше можно, например, обозначать достижения целей:
    yaCounterXXXXXX.reachGoal("ME_IS_RICH_NOW");

    Upd. у некоторых посетителей включены блокировщики скриптов, отрубающие загрузку Яндекс.Метрики. Не поленитесь предусмотреть случай ошибки загрузки этого скрипта.

    Например, заменой его, в случае неудачи «пустышкой», подгружаемой с вашего сервера, указав её в paths:
    "yametrika": [ "//mc.yandex.ru/metrika/watch", "lib/yamertika_dummy"]

    где описаны методы метрики:
    ...
    return {
    	addFileExtension:function(){}
    	, clickmap: function(){}
    	, enableAll: function(){}
    	, extLink: function(){}
    	, file:  function(){}
    	, hit:  function(){}
    	, replacePhones:function(){}
    	, notBounce: function(){}
    	, reachGoal: function(){}
    	, trackLinks: function(){}
    	, params: function(){}
    };


    или просто обработав ошибку в конфиге require:

    requirejs.onError = function(err){ 
        if( err.requireModules.length == 1  &&  err.requireModules[0] == "yametrika") { ... } else throw err;
    }
    Ответ написан