Установка скрипта

Ядро 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>

ИДЕНТИФИКАТОР_СЕКЦИИ — строка, которую вы получаете в админке; она одна и та же в обоих местах.

Что делает каждая строка

Строка Зачем
preconnect Заранее устанавливает соединения с серверами Gravity Field: к моменту, когда ядро отправит первые запросы, DNS и TLS уже выполнены.
preload Сообщает браузеру о конфигурации секции (dynamic.js) до того, как ядро загрузится, — файл скачивается параллельно с core.js, а не после него. Экономит заметную часть времени до показа кампаний.
GF.q + GF.API Очередь вызовов на время, пока ядро ещё грузится: события, отправленные в этот момент, сохранятся и уйдут на сервер после инициализации. Служебная деталь — обращаться к GF.q из своего кода не нужно.
GF.section Идентификатор секции.
GF.pageContext Тип и данные текущей страницы.
core.js Само ядро.

Заглушка объявлена как GF.API = GF.API || … — на случай, если сниппет вставится дважды (частая ситуация при установке через тег-менеджер): уже работающее ядро не будет затёрто.

Скрипт должен подключаться на странице один раз. Если core.js окажется подключён дважды — например, тегом на странице и заодно через тег-менеджер, — ядро выведет предупреждение в консоль и пропустит повторную инициализацию, продолжив работать первым экземпляром.

Защита вызовов от снятой интеграции

Вызовы GF.API обычно разбросаны по коду сайта и тегам тег-менеджера, а сниппет установки — в одном месте. Если сниппет уберут (переезд шаблона, отключение контейнера, страница вне интеграции), объекта GF на странице не станет, а вызовы останутся.

Обращаться к нему в таком случае нужно через window:

if (typeof window.GF?.API === 'function') {
  window.GF.API('event', { name: 'Some event' });
}

Вариант без windowtypeof GF?.API — не подходит: обращение к необъявленной переменной вызывает ReferenceError до того, как сработает проверка, и прерывает выполнение остального кода в этом блоке.

Если вызовов много, удобнее объявить обёртку один раз и использовать её везде:

function gfEvent(name, properties) {
  window.GF?.API?.('event', { name: name, properties: properties });
}

Отдельная проверка на то, что ядро уже загрузилось, не нужна: пока core.js грузится (или если он не загрузился вовсе — например, его заблокировал блокировщик рекламы), вызовы принимает очередь из сниппета. Ошибки не будет, а накопленные события уйдут на сервер, как только ядро инициализируется.

Дальше