// Обработчик, который выполняется после полной загрузки содержимого документа document.addEventListener('DOMContentLoaded', function() { // Получаем параметры URL страницы const urlParams = new URLSearchParams(window.location.search); //const counterId = urlParams.get('counterId'); // Получаем значение параметра counterId из URL const counterId = 97295011; 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); } } // Функция для проверки, были ли заполнены все поля в форме function isFormValid(form) { const inputs = form.querySelectorAll('input, textarea, select'); for (let input of inputs) { if (!input.validity.valid) { return false; } } return true; } // Прослушиваем событие отправки формы на документе и используем делегирование событий document.addEventListener('submit', function(event) { const form = event.target; // Исключаем формы с определенными классами if (!form.matches('.exclude-class')) { if (isFormValid(form)) { const goalName = form.getAttribute('data-goal-name'); if (goalName && counterId) { //sendYandexMetricGoal(goalName, counterId); } } } }); // Проверка наличия специального параметра 'moskit' в URL if (urlParams.get('moskit') === 'yes' || localStorage.getItem('moskit')) { localStorage.setItem('moskit', 'yes'); // Сохранение москитки console.log('Подсчет активности отключен из-за UTM-метки.'); return; // Завершение выполнения скрипта, если параметр присутствует } // Загрузка достигнутых целей из localStorage или инициализация пустого объекта let goalsAchieved = JSON.parse(localStorage.getItem('goalsAchieved') || '{}'); // Объект для хранения UTM-параметров let utmParams = {}; // Массив специальных целей с их временными порогами let specialGoals = [ { time: 5000, name: "time_5" },{ time: 10000, name: "time_10" },{ time: 20000, name: "time_20" },{ time: 30000, name: "time_30" },{ time: 60000, name: "time_60" } ]; // Время последней проверки достижения специальных целей let lastSpecialGoalUpdateTime = parseInt(localStorage.getItem('lastSpecialGoalUpdateTime') || '0'); // Общее время активности пользователя, загруженное из localStorage let activityTime = parseInt(localStorage.getItem('activityTime') || '0'); // Сбор UTM-параметров из URL urlParams.forEach((value, key) => { if (key.startsWith('utm_')) { utmParams[key] = value; } }); // Навешивание обработчиков на события движения мыши, прокрутки и нажатия клавиш ['mousemove', 'scroll', 'keypress'].forEach(function(event) { window.addEventListener(event, updateActivityTime); }); // Функция для обновления времени активности пользователя function updateActivityTime() { activityTime += 20; //console.log(`Активное время: ${(activityTime / 1000).toFixed(2)} секунд`); // Показываем активное время localStorage.setItem('activityTime', activityTime.toString()); // Сохранение обновленного времени активности checkSpecialGoals(); // Проверка на достижение специальных целей } // Функция для проверки достижения специальных целей function checkSpecialGoals() { const currentTime = Date.now(); // Проверка, прошла ли секунда с последней проверки if (currentTime - lastSpecialGoalUpdateTime >= 1000) { specialGoals.forEach((specialGoal) => { const goalTime = specialGoal.time; // Проверка достижения времени для каждой специальной цели и ее отсутствия в достигнутых if (activityTime >= goalTime && !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); // Вызов функции Яндекс.Метрики для отправки события } // Обработчик события перед закрытием страницы 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"; // URL серверного скрипта для обработки уведомлений var params = JSON.stringify(data); // Параметры в формате JSON xhr.open("POST", url, true); xhr.setRequestHeader("Content-type", "application/json"); xhr.send(params); // Отправка запроса } */ });