(function () { 'use strict'; // Инициализируем dataLayer, если он еще не создан window.dataLayer = window.dataLayer || []; // Сохраняем оригинальную функцию push const originalPush = window.dataLayer.push; // Список стандартных и кастомных e-commerce событий для фильтрации const ecommerceEvents = [ 'view_item', 'view_item_list', 'select_item', 'add_to_cart', 'remove_from_cart', 'view_cart', 'begin_checkout', 'purchase', 'refund', 'detail', 'checkout', 'checkout_option' // GA Universal Analytics (на случай старых интеграций) ]; // Включение/выключение вашего собственного кода для тестов window.MY_ANALYTICS_ENABLED = true; // Установите false, чтобы заблокировать выполнение ВАШЕГО скрипта // Переопределяем метод push window.dataLayer.push = function (...args) { args.forEach(item => { if (item && typeof item === 'object') { const eventName = item.event; const hasEcommerceData = item.ecommerce || item.ecommerce === null || ecommerceEvents.includes(eventName); if (hasEcommerceData || eventName) { const stack = new Error().stack; console.groupCollapsed( `%c[GTM Tracker]%c Событие: %c"${eventName || 'без event'}"`, 'color: #4CAF50; font-weight: bold;', 'color: inherit;', 'color: #2196F3; font-weight: bold;' ); console.log('Переданный объект:', item); console.log('Время вызова:', new Date().toISOString()); // Фильтрация источника по стеку вызовов if (stack) { console.log('Стек вызовов (Stack Trace):'); console.log(stack); } console.groupEnd(); } } }); // Вызываем стандартный push, чтобы данные не терялись для GTM return originalPush.apply(this, args); }; console.log('%c[GTM Tracker] Перехватчик dataLayer.push успешно запущен', 'color: #4CAF50; font-weight: bold;'); })();