Publishers
Підключення SDK і згода користувача
SDK збирає URL і пошукові запити, тому за GDPR (ст. 6) та ePrivacy (ст. 5(3)) йому потрібна явна згода користувача. Поки користувач не натиснув «Дозволити», SDK не створює ідентифікатор, не зберігає події й не звертається до сервера. Функціональність вашого розширення від вибору не залежить.
Встановлення
У кабінеті: Розширення → SDK → «Завантажити». Архів розпакуйте в корінь розширення.
intentd.min.js SDK з ключами вашого розширення — не перейменовувати
intentd-consent.html сторінка згоди для розширень без popup
intentd-consent.js скрипт цієї сторінки (MV3 забороняє inline-скрипти) {
"manifest_version": 3,
"background": { "service_worker": "background.js", "type": "module" },
"action": { "default_popup": "popup.html" },
"permissions": ["storage", "webNavigation", "tabs", "alarms", "unlimitedStorage"],
"host_permissions": ["https://api.intentd.io/*"]
} // background.js — першим рядком, на верхньому рівні
import './intentd.min.js'; Consent Flow
Розширення з popup
Викличте IntentD.mountConsent() у popup. Якщо ви цього не зробите, користувач побачить лише вкладку згоди при встановленні, а SDK залишиться неактивним до його вибору — відповідальність за виклик лежить на розширенні.
<div id="consent-root"></div>
<!-- ... інтерфейс вашого розширення ... -->
<script src="intentd.min.js"></script>
<script src="popup.js"></script> // Плашка з'явиться, лише якщо згоди на поточну версію тексту немає.
// Проміс вирішується вибором користувача: true — дозволив, false — відмовився.
IntentD.mountConsent(document.getElementById('consent-root')); Плашка рендериться в закритому Shadow DOM: ваші стилі на неї не впливають, її стилі не впливають на вас. Тема (світла чи темна) добирається за фоном popup, ширина — від 320 до 800 px. Кнопки «Відмовитися» і «Дозволити» однакового розміру, попередньо встановлених галочок немає. Після згоди плашка зникає і більше не показується; після відмови з’являється при наступному відкритті popup.
Розширення без popup
SDK сам відкриває вкладку intentd-consent.html при встановленні та при старті браузера, поки згоди немає. Друга вкладка не відкривається — наявна отримує фокус. Після вибору вкладка закривається.
Коли показується запит
| Подія | Поведінка |
|---|---|
| Встановлення або оновлення розширення | Вкладка згоди, якщо немає згоди на поточну версію |
| Старт браузера | Вкладка згоди — лише в розширень без popup |
| Відкриття popup | Плашка, якщо ви викликаєте mountConsent і згоди немає |
| Будь-яке інше пробудження service worker | Нічого не показується |
| Згоду вже надано | Плашка більше не показується |
| Зміна версії тексту згоди | Згоду запитують заново |
Відкликання згоди
Текст згоди обіцяє користувачеві можливість відкликати її в налаштуваннях. Додайте на сторінку налаштувань перемикач:
const allowed = await IntentD.hasConsent();
// Кнопка «Відкликати згоду»
await IntentD.revokeConsent(); // збір зупинено, локальні дані видалено
// Кнопка «Дозволити збір» (наприклад, після відмови)
await IntentD.grantConsent(); Не додавайте сторінку згоди до web_accessible_resources
Сторінки розширення доступні йому самому без цього списку. Якщо сторінка стане web-accessible, будь-який сайт зможе вбудувати її у фрейм і непомітно отримати клік «Дозволити» — така згода недійсна.
API
| Метод | Призначення |
|---|---|
| IntentD.mountConsent(element) | Показати плашку в popup, якщо згоди немає. Promise<boolean>. |
| IntentD.hasConsent() | Чи є згода на поточну версію тексту. Promise<boolean>. |
| IntentD.getConsentState() | 'approved' | 'declined' | null. |
| IntentD.grantConsent() | Записати згоду (з вашого власного UI). |
| IntentD.revokeConsent() | Відкликання: збір зупиняється, черга та ідентифікатор установки видаляються. |
| IntentD.openConsentTab() | Відкрити вкладку згоди вручну (або сфокусувати відкриту). |
| IntentD.status() | Стан SDK, включно з consent. |
Рішення зберігається лише в chrome.storage.local цього профілю браузера: кожен пристрій питає окремо, сервер не зберігає, хто і коли погодився. На сервер із кожним пакетом іде лише версія тексту згоди.