452 слова | 2 минуты
Cookie Consent System
Полнофункциональная система управления согласием на использование cookie с поддержкой категорий, skeleton loader и встроенной консолью для отслеживания всех действий.
Обзор
Это система управления согласием на использование cookie для веб-страниц. Система позволяет пользователям контролировать, какие типы cookie могут быть использованы на сайте, с соблюдением требований GDPR и других законов о защите данных.
Ключевые возможности
- 4 категории cookie (Необходимые, Функциональные, Аналитические, Маркетинговые)
- Skeleton Loader - визуальный эффект загрузки модального окна
- Консоль логирования - отслеживание всех действий в реальном времени
- LocalStorage - сохранение настроек пользователя
- Условная загрузка скриптов - активация только разрешенных категорий
- Адаптивный дизайн - работает на всех устройствах
- Повторное открытие настроек - кнопка управления в углу экрана
- Сброс настроек - возврат к начальному состоянию
Функционал
1. Категории Cookie
-
Необходимые (Necessary)
- Статус: Всегда активны (нельзя отключить)
- Назначение: Базовая функциональность сайта
- Примеры: Сессии, аутентификация, безопасность
-
Функциональные (Functional)
- Статус: Опционально
- Назначение: Расширенные возможности и предпочтения
- Примеры: Язык интерфейса, тема оформления, настройки UI
-
Аналитические (Analytics)
- Статус: Опционально
- Назначение: Сбор статистики и анализ поведения
- Примеры: Google Analytics, Yandex Metrika, heatmaps
-
Маркетинговые (Marketing)
- Статус: Опционально
- Назначение: Таргетированная реклама и ретаргетинг
- Примеры: Facebook Pixel, Google Ads, рекламные сети
2. Логика работы
Первый визит (нет согласия)
Загрузка страницы
↓
Проверка localStorage → НЕТ данных
↓
Показать overlay с блюром
↓
Skeleton Loader (1.5 сек)
↓
Модальное окно "Мы используем cookie"
↓
Пользователь выбирает:
├─→ "Принять все" → Все категории = TRUE
└─→ "Настроить" → Выбор отдельных категорий
↓
Сохранение в localStorage
↓
Активация разрешенных скриптов
↓
Закрытие модального окна
Повторный визит (есть согласие)
Загрузка страницы
↓
Проверка localStorage → ЕСТЬ данные
↓
Загрузка сохраненных настроек
↓
Автоматическая активация скриптов
↓
Overlay остается скрытым
↓
Страница готова к работе
Изменение настроек
Клик на "Настройки Cookie"
↓
Показать overlay
↓
Контент показывается БЕЗ skeleton (уже есть согласие)
↓
Открыть Settings Modal
↓
Изменить чекбоксы
↓
"Сохранить" → Обновление localStorage + активация скриптов
"Сбросить" → Удаление данных + перезагрузка страницы
3. API и методы
Класс CookieConsentManager
Основные методы:
// Инициализация
new CookieConsentManager()
// Проверка наличия согласия
cookieManager.hasConsent() // → true/false
// Проверка разрешения категории
cookieManager.isAllowed('analytics') // → true/false
// Принять все cookie
cookieManager.acceptAll()
// Обновить настройки
cookieManager.update({
functional: true,
analytics: false,
marketing: true
})
// Показать/скрыть модальное окно
cookieManager.showOverlay()
cookieManager.hideOverlay()
// Открыть настройки
cookieManager.showSettings()
// Сбросить настройки
cookieManager.resetSettings()
Структура сохраненных данных:
localStorage.getItem('cookieConsent')
// Возвращает:
{
necessary: true, // Всегда true
functional: true, // Выбор пользователя
analytics: false, // Выбор пользователя
marketing: true, // Выбор пользователя
timestamp: "2024-11-14T15:30:00.000Z"
}
4. Интеграция скриптов
Блокировка встроенных скриптов:
<!-- НЕ ЗАГРУЖАЕТСЯ по умолчанию -->
<script
type="text/plain"
data-cookie-category="analytics"
data-script-name="Google Analytics">
// Код Google Analytics
console.log('Google Analytics загружен');
</script>
Блокировка внешних скриптов:
<script
type="text/plain"
data-cookie-category="marketing"
data-script-name="Facebook Pixel"
data-src="https://connect.facebook.net/en_US/fbevents.js">
</script>
Блокировка iframe:
<iframe
data-cookie-category="marketing"
data-src="https://www.youtube.com/embed/VIDEO_ID"
width="560"
height="315">
</iframe>
Блокировка изображений:
<img
data-cookie-category="marketing"
data-src="https://example.com/tracking-pixel.gif"
alt="Tracking pixel">
После получения согласия скрипты автоматически активируются:
// type="text/plain" → type="text/javascript"
// Скрипт начинает выполняться
5. Встроенная консоль
Типы сообщений:
- Информационное сообщение
- Успешная операция
- Предупреждение
- Загрузка скрипта
- Сохранение данных
- Изменение настроек
- Сброс
- Разблокировка категории
Примеры логов:
[15:30:25]: Требуется согласие на использование cookie
[15:30:27]: Модальное окно cookie загружено
[15:30:35]: Пользователь принял все cookie
[15:30:35]: Категория "necessary" разблокирована
[15:30:35]: Загружен скрипт: Необходимый скрипт
[15:30:35]: Категория "functional" разблокирована
[15:30:35]: Загружен скрипт: Preferences Manager
Технические детали
Используемые технологии
- Bootstrap 5 - для UI компонентов
- Vanilla JavaScript - без внешних зависимостей
- LocalStorage API - для хранения настроек
- CSS3 Animations - для skeleton loader и эффектов
Архитектура кода
Код организован в объектно-ориентированном стиле:
- CookieConsentManager - главный класс управления
- logging() - функция логирования событий
- Event Handlers - обработчики событий для кнопок и форм
Хранение данных
Что хранится в localStorage:
Ключ: 'cookieConsent'
Значение: JSON с настройками пользователя
Размер: ~150 байт
Срок хранения: Бессрочно (до очистки браузера)
GDPR совместимость
- Пользователь может отказаться от всех необязательных cookie
- Настройки можно изменить в любой момент
- Скрипты не загружаются до получения согласия
- Прозрачная информация о каждой категории
- Возможность полного сброса настроек
Примеры использования
Пример 1: Проверка разрешения перед действием
if (window.CookieConsent.isAllowed('analytics')) {
// Загрузить Google Analytics
gtag('config', 'GA_MEASUREMENT_ID');
} else {
console.log('Аналитика заблокирована пользователем');
}
Пример 2: Динамическое обновление настроек
// Разрешить все категории программно
window.CookieConsent.update({
functional: true,
analytics: true,
marketing: true
});
Пример 3: Собственное логирование
// Используйте функцию logging() для добавления записей в консоль
logging('Пользовательское событие произошло');
logging(`Значение: ${someValue}`);
Пример 4: Проверка состояния при загрузке
document.addEventListener('DOMContentLoaded', function() {
if (window.CookieConsent.hasConsent()) {
console.log('Пользователь уже дал согласие');
// Загрузить зависимые компоненты
initializeAnalytics();
initializeMarketing();
} else {
console.log('Ожидание согласия пользователя');
}
});
Настройка и кастомизация
Изменение времени skeleton loader
// В методе showOverlay()
setTimeout(() => {
document.getElementById('modalSkeleton').style.display = 'none';
document.getElementById('modalContent').style.display = 'block';
logging('Модальное окно cookie загружено');
}, 1500); // ← Измените значение (в миллисекундах)
Изменение цветов
/* Основной цвет кнопок */
.btn-cookie-primary {
background: #0066cc; /* ← Ваш цвет */
color: white;
}
/* Цвет overlay */
.overlay {
background: rgba(0, 0, 0, 0.5); /* ← Прозрачность фона */
backdrop-filter: blur(8px); /* ← Размытие */
}
/* Цвет консоли */
.console {
background-color: #1e1e1e;
color: #00ff00; /* ← Цвет текста консоли */
}
Изменение текста
Отредактируйте содержимое модальных окон в HTML:
<h2>Мы используем cookie</h2>
<p>
Ваш текст о политике cookie...
</p>
Частые вопросы
Почему skeleton loader появляется каждый раз?
Проверьте, что в HTML overlay имеет класс hidden по умолчанию:
<div id="overlay" class="overlay hidden">
Как изменить время показа skeleton?
В методе showOverlay() измените таймаут:
setTimeout(() => { ... }, 1500); // миллисекунды
Скрипты не активируются после согласия
Убедитесь, что:
- Атрибут
type="text/plain"установлен - Атрибут
data-cookie-categoryсоответствует категории - Категория разрешена в настройках
Как сбросить настройки для тестирования?
Используйте кнопку "Сбросить" или выполните в консоли:
localStorage.removeItem('cookieConsent');
location.reload();
Как проверить localStorage?
В консоли браузера:
console.log(localStorage.getItem('cookieConsent'));
Как очистить данные вручную?
В консоли браузера:
localStorage.removeItem('cookieConsent');
location.reload();
Как проверить активированные скрипты?
В консоли браузера:
console.log(window.CookieConsent.activatedScripts);
Отладка
Проверка localStorage:
// В консоли браузера
console.log(localStorage.getItem('cookieConsent'));
Очистка данных вручную:
// В консоли браузера
localStorage.removeItem('cookieConsent');
location.reload();
Проверка активированных скриптов:
// В консоли браузера
console.log(window.CookieConsent.activatedScripts);