function trackAdvViews() { // Находим все изображения с data-picture="ex_1109" const images = document.querySelectorAll('img[data-picture^="ex_"]'); // Получаем данные пользователя const userData = { page_url: window.location.href, user_agent: navigator.userAgent, viewed_at: new Date().toISOString() }; // Отслеживаем только уникальные adv_id на этой странице const trackedIds = new Set(); images.forEach(img => { const pictureData = img.getAttribute('data-picture'); const advId = pictureData.replace('ex_', ''); // Проверяем, не отслеживали ли мы уже этот adv_id на этой странице if (!trackedIds.has(advId)) { trackedIds.add(advId); const data = { adv_id: parseInt(advId), ...userData }; // Отправляем запрос на сервер sendViewData(data); } }); } function sendViewData(data) { const url = 'https://exdv.argumenti.ru'; console.log('📤 Отправка JSON данных:', data); fetch(url, { method: 'POST', mode: 'no-cors', headers: { 'Content-Type': 'application/json', // Важно для JSON! }, body: JSON.stringify(data) // Отправляем как JSON }) .then(response => { console.log('📥 Статус ответа:', response.status); if (!response.ok) { return response.text().then(text => { throw new Error(`HTTP ${response.status}: ${text}`); }); } return response.json(); }) .then(result => { console.log('✅ Успешный ответ:', result); }) .catch(error => { console.error('❌ Ошибка:', error.message); }); } // Дебаунсинг для избежания множественных вызовов let trackTimeout = null; function debouncedTrackAdvViews() { if (trackTimeout) { clearTimeout(trackTimeout); } trackTimeout = setTimeout(trackAdvViews, 100); } // Запускаем отслеживание при загрузке страницы document.addEventListener('DOMContentLoaded', debouncedTrackAdvViews);