dana-medical-site/web/src/lib/attribution.js
2026-10-14 13:33:13 +00:00

46 lines
1.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Откуда пришёл посетитель: UTM-метки из адреса первой страницы и внешний сайт-источник.
// Запоминается на сессию (первый заход) и уходит вместе с заявкой — по этим данным
// строится «Источники заявок» в админке. Никаких персональных данных здесь нет.
const KEY = 'dana:attribution';
const UTM_KEYS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term'];
function storage() {
try {
return window.sessionStorage;
} catch {
return null; // приватный режим или запрет сайта
}
}
export function captureAttribution() {
if (typeof window === 'undefined') return;
const store = storage();
if (!store || store.getItem(KEY)) return;
const data = {};
const params = new URLSearchParams(window.location.search);
for (const k of UTM_KEYS) {
const v = params.get(k);
if (v) data[k] = v.slice(0, 200);
}
try {
const ref = document.referrer ? new URL(document.referrer) : null;
if (ref && ref.host !== window.location.host) data.referrer = ref.host;
} catch {
/* битый referrer — просто без него */
}
try {
store.setItem(KEY, JSON.stringify(data));
} catch {
/* хранилище переполнено или запрещено */
}
}
export function attribution() {
try {
return JSON.parse(storage()?.getItem(KEY) || '{}');
} catch {
return {};
}
}