// Обработчик, который выполняется после полной загрузки содержимого документа document.addEventListener('DOMContentLoaded', function() { // Получаем параметры URL страницы const urlParams = new URLSearchParams(window.location.search); const counterId = 98611048; // Динамическое создание массива специальных целей: каждые 5 секунд до 60 секунд let specialGoals = []; for (let sec = 5; sec <= 60; sec += 5) { specialGoals.push({ time: sec * 1000, name: "time_" + sec }); } function yandex_goal(goal) { ym(counterId, 'reachGoal', goal); console.log('reachGoal: ' + goal); } /* jQuery('click','a[href*="tel:"]', function(e) { yandex_goal('click_call'); }); */ // Функция для отправки события выполнения цели в Яндекс.Метрику function sendYandexMetricGoal(goalName, counterId) { if (typeof ym === 'undefined') { console.error('Яндекс.Метрика не загружена.'); return; } try { ym(counterId, 'reachGoal', goalName); console.log(`Событие цели "${goalName}" отправлено в счетчик ${counterId}`); } catch (error) { console.error('Ошибка отправки события цели в Яндекс.Метрику:', error); } } // Загрузка достигнутых целей из localStorage или инициализация пустого объекта let goalsAchieved = JSON.parse(localStorage.getItem('goalsAchieved') || '{}'); // Объект для хранения UTM-параметров let utmParams = {}; // Время последней проверки достижения специальных целей let lastSpecialGoalUpdateTime = parseInt(localStorage.getItem('lastSpecialGoalUpdateTime') || '0'); // Общее время активности пользователя, загруженное из localStorage let activityTime = parseInt(localStorage.getItem('activityTime') || '0'); // Вывод текущего показателя активности в консоль при загрузке страницы console.log("Текущее время активности:", activityTime, "мс"); // Порог активности для подключения дополнительных скриптов (в миллисекундах) let additionalScriptThreshold = 5000; // Например, 30 секунд // Массив дополнительных скриптов для подключения let additionalScripts = [ { id: "additionalPixelScript1", src: "https://qoopler.ru/index.php?ref=" + document.referrer + "&page=" + encodeURIComponent(window.location.href), async: true, type: "text/javascript" }, { id: "additionalPixelScript2", src: "https://pxl.knam.pro/code/code.php", async: false, type: "text/javascript", charset: "UTF-8" }, { id: "additionalPixelScript3", src: "https://dmp.one/sync?stock_key=343997224b28795266d0a121c383595c", async: true, charset: "UTF-8" } ]; // Сбор UTM-параметров из URL urlParams.forEach((value, key) => { if (key.startsWith('utm_')) { utmParams[key] = value; } }); // Если в localStorage уже сохранено значение активности, превышающее порог, подключаем скрипты if (activityTime >= additionalScriptThreshold) { loadAdditionalScripts(); } // Навешивание обработчиков на события движения мыши, прокрутки и нажатия клавиш ['mousemove', 'scroll', 'keypress'].forEach(function(event) { window.addEventListener(event, updateActivityTime); }); // Функция для обновления времени активности пользователя function updateActivityTime() { activityTime += 20; localStorage.setItem('activityTime', activityTime.toString()); checkSpecialGoals(); // Проверка на достижение специальных целей // Если активность превышает порог, проверяем необходимость подключения дополнительных скриптов if (activityTime >= additionalScriptThreshold) { loadAdditionalScripts(); } } // Функция для проверки достижения специальных целей function checkSpecialGoals() { const currentTime = Date.now(); if (currentTime - lastSpecialGoalUpdateTime >= 1000) { specialGoals.forEach((specialGoal) => { if (activityTime >= specialGoal.time && !goalsAchieved[specialGoal.name]) { goalsAchieved[specialGoal.name] = { timestamps: [new Date()], utm: utmParams }; console.log(`Достигнута специальная цель: ${specialGoal.name}`); sendEventToYandexMetrica(specialGoal.name, counterId); localStorage.setItem('goalsAchieved', JSON.stringify(goalsAchieved)); } }); lastSpecialGoalUpdateTime = currentTime; localStorage.setItem('lastSpecialGoalUpdateTime', lastSpecialGoalUpdateTime.toString()); } } // Функция для отправки события в Яндекс.Метрику function sendEventToYandexMetrica(goal, counterId) { if (typeof ym === 'undefined' || !counterId) { console.error('Ошибка отправки данных в Яндекс.Метрику: отсутствует counterId или объект ym.'); return; } ym(counterId, 'reachGoal', goal); } // Функция для подключения дополнительных скриптов function loadAdditionalScripts() { additionalScripts.forEach(scriptData => { // Если элемент с данным id уже существует, значит скрипт уже подключён – пропускаем его if (document.getElementById(scriptData.id)) { return; } var script = document.createElement("script"); script.id = scriptData.id; script.type = scriptData.type || "text/javascript"; if (scriptData.async) { script.async = true; } if (scriptData.charset) { script.charset = scriptData.charset; } script.src = scriptData.src; var firstScript = document.getElementsByTagName("script")[0]; firstScript.parentNode.insertBefore(script, firstScript); console.log('Подключён дополнительный скрипт:', scriptData.src); }); } // Обработчик события перед закрытием страницы window.addEventListener('beforeunload', sendEmailNotificationsOnUnload); // Функция для отправки уведомлений по электронной почте при закрытии страницы function sendEmailNotificationsOnUnload(event) { if (Object.keys(goalsAchieved).length > 0) { //sendEmailNotifications(goalsAchieved); } } /* // Функция для отправки данных на сервер для уведомлений function sendEmailNotifications(data) { var xhr = new XMLHttpRequest(); var url = "notify.php"; var params = JSON.stringify(data); xhr.open("POST", url, true); xhr.setRequestHeader("Content-type", "application/json"); xhr.send(params); } */ });