Из этого руководства вы узнаете, как преобразовать существующий пользовательский HTML-тег для использования изолированного JavaScript.
В этом руководстве мы будем использовать API injectScript
. injectScript
– это стандартный API, который содержит сторонние скрипты и используется для преобразования существующих тегов. Такие теги часто устанавливают базовую функциональность во время загрузки скрипта, а затем расширяют ее.
Исходный тег
<!-- Google Analytics -->
<script>
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXXX-1', 'auto');
ga('send', 'pageview');
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>
<!-- End Google Analytics -->
Преобразование кода
Рассмотрим код JavaScript из описанного выше тега:
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXXX-1', 'auto');
ga('send', 'pageview');
Чтобы создать изолированный JavaScript, необходимо посмотреть, какие нативные API-интерфейсы JavaScript применяются в этом скрипте, и преобразовать код для использования их эквивалентов.
Например, в теге analytics.js
они следующие:
Нативный JavaScript | Изолированный JavaScript |
---|---|
window.ga |
setInWindow |
arguments |
createArgumentsQueue |
+ new Date |
getTimestamp |
API-интерфейсы изолированного JavaScript добавляются в скрипт с помощью require
.
Например, чтобы использовать API setInWindow()
, добавьте его в начало скрипта:
const setInWindow = require('setInWindow');
Затем преобразуйте window.ga
:
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)}
// becomes
const createArgumentsQueue = require('createArgumentsQueue');
const ga = createArgumentsQueue('ga', 'ga.q');
А теперь – назначение ga.l
:
ga.l=+new Date;
// becomes
const getTimestamp = require('getTimestamp');
setInWindow('ga.l', getTimestamp(), true);
И наконец, два вызова функции ga()
:
ga('create', 'UA-XXXXXX-1', 'auto');
ga('send', 'pageview');
// becomes
const trackingId = data.trackingId;
ga('create', trackingId, 'auto');
ga('send', 'pageview');
Чтобы использовать data.trackingId
, добавьте в свой шаблон поле.
Перейдите на вкладку
Fields
(Поля) и нажмитеAdd Field
(Добавить поле).Выберите тип поля
Text input
(Ввод текста).Измените идентификатор с
text1
наtrackingId
.
Вы преобразовали первый тег <script/>
, но вам также необходимо загрузить вспомогательный скрипт.
Вот как это сделать:
<script async src='https://www.google-analytics.com/analytics.js'></script>
// becomes
const injectScript = require('injectScript');
const url = 'https://www.google-analytics.com/analytics.js';
injectScript(url, data.gtmOnSuccess, data.gtmOnFailure, url);
Передача cacheToken
функции injectScript()
позволяет выполнить оптимизацию. Для следующих сценариев скрипт analytics.js
будет загружен только один раз:
- Тег, который запускается несколько раз.
- Более одного тега из пользовательского шаблона в контейнере.
- Другие пользовательские шаблоны, где применяется
injectScript()
с тем же значениемcacheToken
.
Разрешения
Если до этого момента вы пытались запустить код, то могли заметить ошибки в консоли.
Она связана с тем, что в изолированной среде JavaScript необходимо объявить значения и URL, к которым вы получаете доступ. В этом примере вам необходим доступ к глобальным переменным ga.q
, ga.l
и ga
, а вставляемый скрипт размещен по адресу https://www.google-analytics.com/analytics.js
.
Чтобы настроить разрешения для Global Variables
, выполните следующие действия:
Перейдите на вкладку
Permissions
(Разрешения), разверните менюAccesses Global Variables
(Доступ к глобальным переменным) и нажмитеAdd Key
(Добавить ключ).В качестве ключа укажите
ga
и установите флажкиRead
(Чтение),Write
(Запись) иExecute
(Выполнение).Сделайте то же самое для
ga.q
иga.l
. Обратите внимание, что для этих полей не требуется разрешениеExecute
.
Если сейчас вы снова нажмете кнопку Выполнить код, в консоли появится новая ошибка,
на этот раз с упоминанием Inject Scripts
.
Чтобы настроить разрешение для Inject Scripts
, выполните следующие действия:
Добавьте
https://www.google-analytics.com/analytics.js
вAllowed URL Match Patterns
.
Теперь, если вы нажмете кнопку Выполнить код, ошибок в консоли быть не должно. Итак, вы успешно преобразовали тег в пользовательский шаблон. Нажмите Save
(Сохранить) и используйте его так же, как любой другой тег в Google Менеджере тегов.
Полностью преобразованный тег
В итоге изолированный скрипт JavaScript должен выглядеть так:
const setInWindow = require('setInWindow');
const copyFromWindow = require('copyFromWindow');
const createArgumentsQueue = require('createArgumentsQueue');
const getTimestamp = require('getTimestamp');
const injectScript = require('injectScript');
const trackingId = data.trackingId;
const ga = createArgumentsQueue('ga', 'ga.q');
setInWindow('ga.l', getTimestamp(), false);
ga('create', trackingId, 'auto');
ga('send', 'pageview');
const url = 'https://www.google-analytics.com/analytics.js';
injectScript(url, data.gtmOnSuccess, data.gtmOnFailure, url);