Решение проблемы Uncaught TypeError: ym is not a function в Яндекс.Метрике
В этом руководстве мы рассмотрим, как решить ошибку в консоли ‘ym is not a function’ в Яндекс.Метрике.
Исправим ошибку проверяя загрузку скрипта Яндекс.Метрики
- Создание интервала: В этом коде используется функция 
setInterval, которая позволяет выполнять определенную функцию через равные промежутки времени. В данном случае, функция будет вызываться каждые 300 миллисекунд. - Проверка функции ym: Внутри этой функции происходит проверка, является ли 
ymфункцией. Это необходимо для того, чтобы убедиться, что скрипт Яндекс.Метрики уже загружен. Еслиymявляется функцией, это означает, что скрипт Яндекс.Метрики успешно загружен. - Инициализация Яндекс.Метрики: Если 
ymявляется функцией, то происходит инициализация Яндекс.Метрики с определенными настройками. Это включает в себя активацию различных функций Яндекс.Метрики, таких как отслеживание кликов, отслеживание ссылок, точное отслеживание отказов, вебвизор и электронная коммерция. - Остановка интервала: После успешной инициализации Яндекс.Метрики интервал останавливается с помощью функции 
clearInterval. Это означает, что функция, которую мы задали вsetInterval, больше не будет вызываться. - Вывод сообщения в консоль: Если 
ymне является функцией, это означает, что скрипт Яндекс.Метрики еще не загружен. В этом случае в консоль выводится сообщение ‘Метрика’. 
// Здесь я создаю интервал с помощью функции setInterval. Эта функция будет вызываться каждые 300 миллисекунд.
var ee = setInterval(function () {
// Здесь я проверяю, является ли ym функцией. Если это так, значит, скрипт Яндекс.Метрики уже загружен.
    if (typeof window.ym === 'function') {
        // Если ym является функцией, я инициализирую Яндекс.Метрику с моими настройками.
        ym(XXXXXX, "init", {
            clickmap:true,
            trackLinks:true,
            accurateTrackBounce:true,
            webvisor:true,
            ecommerce:"dataLayer"
        });
        // После инициализации Яндекс.Метрики я останавливаю интервал, чтобы он больше не вызывался.
        clearInterval(ee);
    } else {
        // Если ym не является функцией, значит, скрипт Яндекс.Метрики еще не загружен. Я вывожу сообщение в консоль.
        console.log('Метрика');
    }
}, 300); // Интервал установлен на 300 миллисекунд, что означает, что функция будет вызываться каждые 0,3 секунды.
