Установка скрипта
Ядро Gravity Field — один файл core.js, который устанавливается в <head>
сайта. Он определяет пользователя, отправляет события, загружает конфигурацию
секции и показывает кампании персонализации и рекламы.
Сниппет
Вставьте в <head>, как можно выше — до основного контента страницы:
<link rel="preconnect" href="//evs-01.gravityfield.ai">
<link rel="preconnect" href="//cdn-01.gravityfield.ai">
<link rel="preload" as="script" href="//cdn-01.gravityfield.ai/sections/ИДЕНТИФИКАТОР_СЕКЦИИ/dynamic.js">
<script>
window.GF = window.GF || {};
GF.q = GF.q || [];
GF.API = GF.API || function () { GF.q.push(arguments); };
GF.section = "ИДЕНТИФИКАТОР_СЕКЦИИ";
GF.pageContext = { type: "PAGETYPE", data: [] };
</script>
<script src="//cdn-01.gravityfield.ai/core/core.js"></script>
ИДЕНТИФИКАТОР_СЕКЦИИ — строка, которую вы получаете в админке; она одна и та
же в обоих местах.
Что делает каждая строка
Заглушка объявлена как GF.API = GF.API || … — на случай, если сниппет
вставится дважды (частая ситуация при установке через тег-менеджер): уже
работающее ядро не будет затёрто.
Скрипт должен подключаться на странице один раз. Если core.js окажется
подключён дважды — например, тегом на странице и заодно через тег-менеджер, —
ядро выведет предупреждение в консоль и пропустит повторную инициализацию,
продолжив работать первым экземпляром.
Защита вызовов от снятой интеграции
Вызовы GF.API обычно разбросаны по коду сайта и тегам тег-менеджера, а сниппет
установки — в одном месте. Если сниппет уберут (переезд шаблона, отключение
контейнера, страница вне интеграции), объекта GF на странице не станет, а
вызовы останутся.
Обращаться к нему в таком случае нужно через window:
if (typeof window.GF?.API === 'function') {
window.GF.API('event', { name: 'Some event' });
}
Вариант без window — typeof GF?.API — не подходит: обращение к необъявленной
переменной вызывает ReferenceError до того, как сработает проверка, и
прерывает выполнение остального кода в этом блоке.
Если вызовов много, удобнее объявить обёртку один раз и использовать её везде:
function gfEvent(name, properties) {
window.GF?.API?.('event', { name: name, properties: properties });
}
Отдельная проверка на то, что ядро уже загрузилось, не нужна: пока core.js
грузится (или если он не загрузился вовсе — например, его заблокировал
блокировщик рекламы), вызовы принимает очередь из сниппета. Ошибки не будет, а
накопленные события уйдут на сервер, как только ядро инициализируется.
Дальше
-
Контексты — какие бывают типы страниц и что класть в
pageContext.data. -
Передача событий — как отправлять события через
GF.API. -
Интеграция с SPA — если разделы сайта открываются без перезагрузки страницы.