# 🛠️ Установка скрипта

Для корректной работы персонализации необходимо установить следующие скрипты на каждой странице сайта.  

---

### 📡 Установка скриптов preconnect, prefetch и core.js

Добавьте в раздел `<head>` каждой страницы скрипты для ускорения загрузки внешних ресурсов:  

```jsx
<link rel="preconnect" href="//cdn-01.gravityfield.ai">  
<link rel="preconnect" href="//evs-01.gravityfield.ai">  
<link rel="dns-prefetch" href="//cdn-01.gravityfield.ai">  
<link rel="dns-prefetch" href="//evs-01.gravityfield.ai">  
```

Также в `<head>` необходимо подключить основной скрипт:  

```jsx
<script type="text/javascript" src="//cdn-01.gravityfield.ai/core/core.js"></script>  
```

### 🖋️ Установка переменной `GF`, `Section ID` и `Page Context`

На каждой странице необходимо объявить переменную `GF`, которая включает следующие параметры:  

```jsx
<script>  
window.GF = window.GF || {};  
GF.API = () => {};
GF.section = "идентификатор секции, строка";  
GF.pageContext = { type: "PAGETYPE", data: [] }; // PAGETYPE и пустой массив data - это пример  
</script>  
```

**Описание параметров**

- **`GF`**: Основная переменная для интеграции.  
- **`GF.API`**: Заглушка, которая позволит безопасно использовать вызовы GF.API при отсутствии скрипта. 
- **`GF.section`**: Уникальный идентификатор секции (строковое значение).  
- **`GF.pageContext`**: Переменная контекста страницы, содержит:  
  - `type`: Тип страницы (например, `CART`, `PRODUCT`, `MAIN`).  
  - `data`: Данные, связанные с контекстом страницы (например, SKU товаров).  
  - `lng` (опционально): Локализация, если на сайте используются разные языки или регионы.  

📖 Подробнее: [Контекст страницы](./page_context.md)

### 🔍 Пример корректно установленных скриптов

=== На примере страницы корзины:

```jsx  
<link rel="preconnect" href="//cdn-01.gravityfield.ai">  
<link rel="preconnect" href="//evs-01.gravityfield.ai">  
<link rel="dns-prefetch" href="//cdn-01.gravityfield.ai">  
<link rel="dns-prefetch" href="//evs-01.gravityfield.ai">  

<script>  
window.GF = window.GF || {};  
GF.API = () => {};
GF.section = "6315dda2f1c33ba4cd04655b";  
GF.pageContext = {   
  type: "CART",  
  data: ["XD-154", "DL-5874", "TN-15", "QSD-1581", "XD-15"]  
};  
</script>  

<script type="text/javascript" src="//cdn-01.gravityfield.ai/core/core.js"></script>  
===

### 📋 Порядок подключения скриптов

1. Подключение `preconnect` и `prefetch`.  
2. Объявление переменной `GF` и указание `Page Context`.  
3. Подключение `core.js`.  

### Рекомендация по работе с внешними библиотеками

При интеграции внешних библиотек настоятельно рекомендуется выполнять проверку наличия методов, свойств или функций перед их непосредственным вызовом. Это позволяет предотвратить ошибки выполнения, которые могут возникнуть из-за внешних факторов, таких как:
- Неполная загрузка библиотеки (например, при сетевых сбоях);
- Устаревшие версии зависимостей;
- Динамическое изменение API библиотеки в runtime.

=== Пример подхода:

```jsx
if (typeof GF?.API === 'function') {
  GF.API('event', { name: "Some event" });
} else {
  // Обработка отсутствия метода: вывод предупреждения, fallback-логика и т.д.
}
```
===

Данная практика повышает отказоустойчивость приложения и обеспечивает корректную работу даже в нештатных сценариях.

!!!warning
После завершения интеграции убедитесь, что весть функционал сайта работает, когда скрипт не доступен 

📖 Подробнее: [Отключение скрипта в браузере](./disable_script.md)
!!!

### Для более глубокого изучения 

- [Как работают скрипты](./scripts_work.md)
- [JS SDK API](./client_side_api/)
