Пользовательские API шаблонов

Основные API

Эти API работают с изолированным JavaScript для создания пользовательских шаблонов в Google Tag Manager. Каждый API добавляется с помощью оператора require() , например:

const myAPI = require('myAPI');

addConsentListener

Регистрирует функцию-слушатель, которая будет выполняться при изменении состояния указанного типа согласия.

Указанный обработчик событий будет вызываться каждый раз, когда состояние указанного типа согласия изменяется с «отказано» на «предоставлено» или с «предоставлено» на «отказано». Тип согласия без состояния считается предоставленным, поэтому обработчик событий не будет вызываться, если неустановленный тип согласия обновляется до «предоставлено». Функции обработчика событий будут отвечать за обеспечение выполнения своего кода соответствующее количество раз.

Пример:

const isConsentGranted = require('isConsentGranted');
const addConsentListener = require('addConsentListener');

if (!isConsentGranted('ad_storage')) {
  let wasCalled = false;
  addConsentListener('ad_storage', (consentType, granted) => {
    if (wasCalled) return;
    wasCalled = true;

    const cookies = getMyCookies();
    sendFullPixel(cookies);
  });
}

Синтаксис

addConsentListener(consentType, listener)

Параметры

Параметр Тип Описание
consentType нить Тип согласия, при изменении которого необходимо отслеживать изменения в зависимости от штата.
listener функция Функция, которая будет выполняться при изменении состояния указанного типа согласия.

При вызове обработчика ему будет передан тип согласия, который изменяется, и новое значение этого типа согласия:

Параметр Тип Описание
consentType нить Тип согласия, который изменяется.
granted логический Логическое значение, которое принимает значение true, если указанный тип согласия изменяется на «предоставлено».

Соответствующие разрешения

Разрешение access_consent с правом чтения для типа согласия.


addEventCallback

API addEventCallback позволяет зарегистрировать функцию обратного вызова, которая будет вызываться по завершении события. Функция обратного вызова будет вызвана, когда все теги события будут выполнены или если истечет время ожидания события на странице. В функцию обратного вызова передаются два значения: идентификатор контейнера, вызывающего функцию, и объект, содержащий информацию о событии.

Синтаксис

addEventCallback(callback)

Параметры

Параметр Тип Описание
callback функция Функция, которая будет вызвана в конце события.

Объект eventData содержит следующие данные:

Имя ключа Тип Описание
tags Множество Массив объектов данных тегов. Каждый тег, сработавший во время события, будет иметь запись в этом массиве. Объект данных тега содержит идентификатор тега ( id ), статус выполнения ( status ) и время выполнения ( executionTime ). Данные тега также будут включать дополнительные метаданные тега, настроенные для тега.

Пример

addEventCallback(function(ctid, eventData) {
  logToConsole('Tag count for container ' + ctid + ': ' + eventData['tags'].length);
});

Соответствующие разрешения

read_event_metadata


aliasInWindow

API aliasInWindow позволяет создавать псевдонимы (например window.foo = window.bar ), что помогает поддерживать определенные теги, требующие использования псевдонимов. Присваивает значение из объекта window , найденного по fromPath , ключу из объекта window по toPath . Возвращает true в случае успеха, false в противном случае.

Синтаксис

aliasInWindow(toPath, fromPath)

Параметры

Параметр Тип Описание
toPath нить Путь, разделённый точками, в объект window , куда следует скопировать значение. Все компоненты в указанном пути до последнего компонента должны уже существовать в объекте window .
fromPath нить Путь, разделённый точками, к значению, которое нужно скопировать, внутри window . Если значение не существует, операция завершится неудачей.

Пример

aliasInWindow('foo.bar', 'baz.qux')

Соответствующие разрешения

access_globals необходим как для toPath , так и для fromPath ; toPath требует доступа на запись, fromPath — доступа на чтение.


callInWindow

Позволяет вызывать функции из пути вне объекта window , управляемым политикой. Вызывает функцию по указанному пути в window с заданными аргументами и возвращает значение. Если тип возвращаемого значения не может быть напрямую сопоставлен с типом, поддерживаемым в изолированном JavaScript, будет возвращено значение undefined . Восемь типов, поддерживаемых в изолированном JavaScript: null , undefined , boolean , number , string , Array , Object и function . Если указанный путь не существует или не ссылается на функцию, будет возвращено undefined .

Синтаксис

callInWindow(pathToFunction, argument [, argument2,... argumentN])

Параметры

Параметр Тип Описание
pathToFunction нить Путь к вызываемой функции в window , разделённый точками.
args * Аргументы, передаваемые функции.

Соответствующие разрешения

access_globals с включенными правами execute .


callLater

Планирует асинхронный вызов функции. Функция будет вызвана после возврата из текущего кода. Это эквивалентно вызову setTimeout(<function>, 0) .

Синтаксис

callLater(function)

Параметры

Параметр Тип Описание
function функция Функция, которую нужно вызвать.

copyFromDataLayer

Возвращает значение, в данный момент присвоенное заданному ключу в слое данных: значение, найденное по заданному ключу, если это примитивный тип, функция или литерал объекта, или undefined в противном случае.

Синтаксис

copyFromDataLayer(key[, dataLayerVersion])

Параметры

Параметр Тип Описание
key нить Ключ в формате «abc».
dataLayerVersion число Необязательный параметр версии слоя данных . Значение по умолчанию — 2. Настоятельно не рекомендуется использовать значение 1.

Соответствующие разрешения

read_data_layer


copyFromWindow

Копирует переменную из объекта window . Если значение в window не может быть напрямую сопоставлено с типом, поддерживаемым в изолированном JavaScript, будет возвращено undefined . Восемь типов, поддерживаемых в изолированном JavaScript, это null , undefined , boolean , number , string , Array , Object и function . Возвращает полученное (и преобразованное) значение.

Синтаксис

copyFromWindow(key)

Параметры

Параметр Тип Описание
key нить Клавиша в window , значение которой нужно скопировать.

Соответствующие разрешения

access_globals


createArgumentsQueue

Создает очередь, которая заполняется объектами-аргументами, для поддержки решений с тегами, которые этого требуют.

Создает функцию в глобальной области видимости (т.е. window ), используя аргумент fnKey (та же семантика, что и у createQueue ). После создания функции этот API создает массив в window (если он еще не существует), используя аргумент arrayKey .

При вызове функции, созданной в рамках fnKey , она добавляет свой объект аргументов в массив, созданный в рамках arrayKey . Возвращаемым значением API является функция, созданная в рамках fnKey .

Для работы этой функции необходимы настройки чтения и записи для параметров fnKey и arrayKey в разрешении access_globals .

Пример:

const gtag = createArgumentsQueue('gtag', 'dataLayer');
gtag('set', {'currency': 'USD'});

Синтаксис

createArgumentsQueue(fnKey, arrayKey)

Параметры

Параметр Тип Описание
fnKey нить Путь в window , где задана функция, если он еще не существует. Этот аргумент поддерживает стандартную точечную нотацию. Если путь к ключу не существует, будет выброшено исключение. То есть, если fnKey равен 'one.two' , будет выброшено исключение.
arrayKey нить Путь в window , где находится массив, если он еще не существует. Этот аргумент поддерживает стандартную точечную нотацию. Если путь к ключу не существует, будет выброшено исключение. То есть, если arrayKey равен 'one.two' , и нет глобального объекта с именем 'one' , будет выброшено исключение.

Соответствующие разрешения

access_globals


createQueue

Создает массив в window (если он еще не существует) и возвращает функцию, которая будет добавлять значения в этот массив.

Для работы этой функции необходимы настройки чтения и записи для arrayKey в разрешении access_globals .

Пример:

const dataLayerPush = createQueue('dataLayer');
dataLayerPush({'currency': 'USD'}, {'event': 'myConversion'});

Синтаксис

createQueue(arrayKey)

Параметры

Параметр Тип Описание
arrayKey нить Ключ в window , где задан массив, если он еще не существует. Этот аргумент поддерживает стандартную точечную нотацию. Если путь к ключу не существует, будет выброшено исключение. Например, если arrayKey равен 'one.two' , и нет глобального объекта с именем 'one' , будет выброшено исключение.

Соответствующие разрешения

access_globals


decodeUri

Декодирует все закодированные символы в предоставленном URI. Возвращает строку , представляющую декодированный URI. Возвращает undefined если предоставлен недопустимый ввод.

Пример:

const decode = require('decodeUri');

const decodedUrl = decode(data.encodedUrl);
if (decodedUrl) {
  // ...
}

Синтаксис

decodeUri(encoded_uri)

Параметры

Параметр Тип Описание
encoded_uri нить URI, закодированный с помощью encodeUri() или иным способом.

Соответствующие разрешения

Никто.


decodeUriComponent

Декодирует все закодированные символы в предоставленном компоненте URI. Возвращает строку , представляющую декодированный компонент URI. Возвращает undefined если предоставлен недопустимый ввод.

Пример:

const decode = require('decodeUriComponent');

const decodedUrl = decode(data.encodedUrl);
if (decodedUrl) {
  // ...
}

Синтаксис

decodeUriComponent(encoded_uri_component)

Параметры

Параметр Тип Описание
encoded_uri_component нить Компонент URI, закодированный с помощью encodeUriComponent() или иным способом.

Соответствующие разрешения

Никто.


encodeUri

Возвращает закодированный унифицированный идентификатор ресурса (URI) путем экранирования специальных символов. Возвращает строку , представляющую предоставленную строку, закодированную как URI. Возвращает undefined если предоставлен недопустимый ввод (единственный суррогат).

Пример:

sendPixel('https://www.example.com/' + encodeUri(pathInput));

Синтаксис

encodeUri(uri)

Параметры

Параметр Тип Описание
uri нить Полный URI.

Соответствующие разрешения

Никто.


encodeUriComponent

Возвращает закодированный унифицированный идентификатор ресурса (URI) путем экранирования специальных символов. Возвращает строку , представляющую предоставленную строку, закодированную как URI. Возвращает undefined если предоставлен недопустимый ввод (единственный суррогат).

Пример:

sendPixel('https://www.example.com/?' + encodeUriComponent(queryInput));

Синтаксис

encodeUriComponent(str)

Параметры

Параметр Тип Описание
str нить Компонент URI.

Соответствующие разрешения

Никто.


fromBase64

API fromBase64 позволяет декодировать строки из их представления в формате Base64. Возвращает undefined при предоставлении недопустимых входных данных.

Синтаксис

fromBase64(base64EncodedString)

Параметры

Параметр Тип Описание
base64EncodedString нить Строка, закодированная в Base64.

Пример

const fromBase64 = require('fromBase64');

const greeting = fromBase64('aGVsbG8=');
if (greeting === 'hello') {
  // ...
}

Соответствующие разрешения

Никто


generateRandom

Возвращает случайное число (целое число) в заданном диапазоне.

Синтаксис

generateRandom(min, max)

Параметры

Параметр Тип Описание
min число Минимальное потенциальное значение возвращаемого целого числа.
max число Максимально возможное значение возвращаемого целого числа.

Соответствующие разрешения

Никто.


getContainerVersion

Возвращает объект , содержащий данные о текущем контейнере. Возвращаемый объект имеет следующие поля:

{
  containerId: string,
  debugMode: boolean,
  environmentName: string,
  environmentMode: boolean,
  previewMode: boolean,
  version: string,
}

Пример

const getContainerVersion = require('getContainerVersion');
const sendPixel = require('sendPixel');

if (query('read_container_data')) {
  const cv = getContainerVersion();

  const pixelUrl = 'https://pixel.com/' +
    '?version=' + cv.version +
    '&envName=' + cv.environmentName +
    '&ctid=' + cv.containerId +
    '&debugMode=' + cv.debugMode +
    '&previewMode=' + cv.previewMode;
  if (query('send_pixel', pixelUrl)) {
    sendPixel(pixelUrl);
  }
}

Синтаксис

getContainerVersion();

Соответствующие разрешения

read_container_data


getCookieValues

Возвращает значения всех файлов cookie с заданным именем.

Синтаксис

getCookieValues(name[, decode])

Параметры

Параметр Тип Описание
name нить Название файла cookie.
decode логический Определяет, следует ли декодировать значения cookie с помощью decodeURIComponent() JavaScript. По умолчанию — true .

Соответствующие разрешения

get_cookies


getQueryParameters

Возвращает первый или все параметры для queryKey текущего URL-адреса. Возвращает первое значение из queryKey или массив значений из queryKey .

Синтаксис

getQueryParameters(queryKey[, retrieveAll])

Параметры

Параметр Тип Описание
queryKey нить Ключ для чтения параметров запроса.
retrieveAll логический Следует ли извлекать все значения.

Например, если текущий URL-адрес — https://example.com/path?var=foo&var1=foo1&var=foo2&var=foo , то:

  • getQueryParameters('var') == 'foo'
  • getQueryParameters('var', false) == 'foo'
  • getQueryParameters('var', null) == 'foo'
  • getQueryParameters('var', true) == ['foo', 'foo2', 'foo']

Соответствующие разрешения

get_url должна разрешать использование компонента query и указывать queryKey в списке разрешенных ключей запроса (или разрешать любой ключ запроса).


getReferrerQueryParameters

API getReferrerQueryParameters работает аналогично getQueryParameters , за исключением того, что он работает с реферером, а не с текущим URL. Возвращает первый или все параметры для queryKey заданного реферера. Возвращает первое значение из queryKey или массив значений из queryKey .

Синтаксис

getReferrerQueryParameters(queryKey[, retrieveAll])

Параметры

Параметр Тип Описание
queryKey нить Ключ для чтения параметров запроса.
retrieveAll логический Следует ли извлекать все значения.

Например, если URL-адрес источника перехода — https://example.com/path?var=foo&var1=foo1&var=foo2&var=foo , то:

  • getReferrerQueryParameters('var') == 'foo'
  • getReferrerQueryParameters('var', false) == 'foo'
  • getReferrerQueryParameters('var', null) == 'foo'
  • getReferrerQueryParameters('var', true) == ['foo', 'foo2', 'foo']

Соответствующие разрешения

get_referrer должна разрешать использование компонента query и указывать queryKey в списке разрешенных ключей запроса (или разрешать любой ключ запроса).


getReferrerUrl

При наличии указанного типа компонента API считывает объект документа для определения источника перехода и возвращает строку, представляющую собой часть источника перехода. Если компонент не указан, возвращается полный URL источника перехода.

Синтаксис

getReferrerUrl([component])

Параметры

Параметр Тип Описание
component нить Компонент, который необходимо вернуть из URL-адреса. Может принимать одно из следующих значений: protocol , host , port , path , query , extension . Если component undefined , null или не соответствует ни одному из этих компонентов, будет возвращен весь URL-адрес.

Соответствующие разрешения

get_referrer должна разрешать использование компонента query и указывать queryKey в списке разрешенных ключей запроса (или разрешать любой ключ запроса).


getTimestamp

Устарело. Предпочтительнее использовать getTimestampMillis .

Возвращает число , представляющее текущее время в миллисекундах с начала эпохи Unix, как это было возвращено функцией Date.now() .

Синтаксис

getTimestamp();

Соответствующие разрешения

Никто.


getTimestampMillis

Возвращает число , представляющее текущее время в миллисекундах с начала эпохи Unix, как это было возвращено функцией Date.now() .

Синтаксис

getTimestampMillis();

Соответствующие разрешения

Никто.


getType

Возвращает строку, описывающую тип заданного значения. В отличие от typeof , getType различает array и object .

Синтаксис

getType(data.someField)

Примечания

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

Входное значение Результат
undefined 'неопределенный'
null 'нулевой'
true 'логическое значение'
12 'число'
'string' 'нить'
{ a: 3 } 'объект'
[ 1, 3 ] 'множество'
(x) => x + 1 'функция'

Соответствующие разрешения

Никто.


getUrl

Возвращает строку , представляющую весь текущий URL-адрес или его часть, при условии указания типа компонента и некоторых параметров конфигурации.

Синтаксис

getUrl(component)

Параметры

Параметр Тип Описание
component нить Компонент, который необходимо вернуть из URL-адреса. Должен быть одним из следующих: protocol , host , port , path , query , extension , fragment . Если компонент undefined , null или не соответствует ни одному из этих компонентов, будет возвращено все значение href .

Соответствующие разрешения

get_url


gtagSet

Отправляет команду `gtag set` на уровень данных для обработки как можно скорее после завершения обработки текущего события и всех вызванных им тегов (или по истечении времени ожидания обработки тегов). Гарантируется, что обновление будет обработано в этом контейнере до обработки любых элементов, находящихся в очереди уровня данных.

Например, если обновление вызывается тегом, срабатывающим при инициализации согласия , оно будет применено до обработки события инициализации. Примерами могут служить ads_data_redaction , установленные в true или false , или url_passthrough установленные в true или false .

Примеры:

const gtagSet = require('gtagSet');

gtagSet({
  'ads_data_redaction': true,
  'url_passthrough': true,
});

Синтаксис

gtagSet(object)

Параметры

Параметр Тип Описание
Object объект Объект, который обновляет глобальное состояние для содержащихся в нём свойств.

Соответствующие разрешения

write_data_layer проверяет права на запись в dataLayer для всех указанных ключей. Если входными данными для gtagSet является простой объект, API проверит права на запись для всех сглаженных ключей внутри этого объекта, например, для gtagSet({foo: {bar: 'baz'}}) API проверит права на запись для foo.bar .

Если на вход gtagSet подается ключ и некоторое значение, отличное от обычного объекта, API проверит наличие разрешения на запись для этого ключа, например, для gtagSet('abc', true) API проверит наличие разрешения на запись для 'abc' .

Обратите внимание, что если во входном объекте присутствует цикл, будут проверяться только ключи, предшествующие ключу, который уже находится в этом же объекте.


injectHiddenIframe

Добавляет на страницу невидимый iframe.

Функции обратного вызова передаются в виде экземпляров функций и оборачиваются в JavaScript-функции, которые вызывают эти функции.

Синтаксис

injectHiddenIframe(url, onSuccess)

Параметры

Параметр Тип Описание
url нить URL-адрес, который будет использоваться в качестве значения атрибута src iframe.
onSuccess функция Вызывается при успешной загрузке кадра.

Соответствующие разрешения

inject_hidden_iframe


injectScript

Добавляет тег <script> на страницу для асинхронной загрузки указанного URL. Функции обратного вызова передаются в виде экземпляров функций и оборачиваются в функции JavaScript, которые вызывают эти функции.

Синтаксис

injectScript(url, onSuccess, onFailure[, cacheToken])

Параметры

Параметр Тип Описание
url нить Адрес скрипта, который необходимо внедрить.
onSuccess функция Вызывается при успешной загрузке скрипта.
onFailure функция Вызывается, когда скрипт не загружается.
cacheToken нить Необязательная строка, указывающая, какой URL-адрес следует кэшировать. Если это значение указано, будет создан только один элемент скрипта для запроса JavaScript. Любые дополнительные попытки загрузки приведут к тому, что указанные методы onSuccess и onFailure будут поставлены в очередь до тех пор, пока скрипт не загрузится.

Соответствующие разрешения

inject_script


isConsentGranted

Возвращает true, если указанный тип согласия предоставлен.

Согласие определенного типа считается предоставленным, если для этого типа согласия установлено значение «предоставлено» или оно не указано вообще. Если для типа согласия установлено любое другое значение, оно будет считаться не предоставленным.

В пользовательском интерфейсе Tag Manager для настроек тегов будет доступна опция «всегда срабатывать». Если тег с включенной опцией «всегда срабатывать» использует этот API, согласие считается предоставленным, и будет возвращено значение true , независимо от фактического состояния согласия.

Пример:

const isConsentGranted = require('isConsentGranted');

if (isConsentGranted('ad_storage')) {
  sendFullPixel();
} else {
  sendPixelWithoutCookies();
}

Синтаксис

isConsentGranted(consentType)

Параметры

Параметр Тип Описание
consentType нить Тип согласия, для которого необходимо проверить штат.

Соответствующие разрешения

Разрешение access_consent с правом чтения для типа согласия.


JSON

Возвращает объект, содержащий функции для работы с JSON.

Функция parse() анализирует JSON-строку для создания значения или объекта, описываемого строкой. Если значение не может быть проанализировано (например, некорректный JSON), функция вернет undefined . Если входное значение не является строкой, оно будет преобразовано в строку.

Функция stringify() преобразует входные данные в строку JSON. Если значение не может быть разобрано (например, объект содержит цикл), метод вернет undefined .

Синтаксис

JSON.parse(stringInput)
JSON.stringify(value);

Параметры

JSON.parse

Параметр Тип Описание
stringInput любой Значение для преобразования. Если значение не является строкой, входные данные будут преобразованы в строку.

JSON.stringify

Параметр Тип Описание
ценить любой Значение для конвертации.

Пример

const JSON = require('JSON');

// The JSON input string is converted to an object.
const object = JSON.parse('{"foo":"bar"}');

// The input object is converted to a JSON string.
const str = JSON.stringify({foo: 'bar'});

localStorage

Возвращает объект с методами для доступа к локальному хранилищу.

Синтаксис

const localStorage = require('localStorage');

// Requires read access for the key. Returns null if the key does not exist.
localStorage.getItem(key);

// Requires write access for the key. Returns true if successful.
localStorage.setItem(key, value);

// Requires write access for the key.
localStorage.removeItem(key);

Соответствующие разрешения

access_local_storage

Пример

const localStorage = require('localStorage');
if (localStorage) {
  const value = localStorage.getItem('my_key');
  if (value) {
    const success = localStorage.setItem('my_key', 'new_value');
    if (success) {
      localStorage.removeItem('my_key');
    }
  }
}

logToConsole

Выводит аргументы в консоль браузера.

Синтаксис

logToConsole(obj1 [, obj2,... objN])

Параметры

Параметр Тип Описание
obj1 [, obj2,... objN] любой Аргументы

Соответствующие разрешения

logging


makeInteger

Преобразует заданное значение в число (целое число).

Синтаксис

makeInteger(value)

Параметры

Параметр Тип Описание
value любой Значение для конвертации.

Соответствующие разрешения

Никто.


makeNumber

Преобразует заданное значение в число .

Синтаксис

makeNumber(value)

Параметры

Параметр Тип Описание
value любой Значение для конвертации.

Соответствующие разрешения

Никто.


makeString

Возвращает заданное значение в виде строки .

Синтаксис

makeString(value)

Параметры

Параметр Тип Описание
value любой Значение для конвертации.

Соответствующие разрешения

Никто.


makeTableMap

Преобразует простой табличный объект с двумя столбцами в Map . Это используется для преобразования поля шаблона SIMPLE_TABLE с двумя столбцами в более удобный для управления формат.

Например, эта функция может преобразовать объект таблицы:

[
  {'key': 'k1', 'value': 'v1'},
  {'key': 'k2', 'value': 'v2'}
]

на карту:

{
  'k1': 'v1',
  'k2': 'v2'
}

Возвращает объект : преобразованную Map если в нее были добавлены пары ключ-значение, или null в противном случае.

Синтаксис

makeTableMap(tableObj, keyColumnName, valueColumnName)

Параметры

Параметр Тип Описание
tableObj Список Объект таблицы, который необходимо преобразовать. Это список карт, где каждая Map представляет собой строку в таблице. Имя свойства в объекте строки — это имя столбца, а значение свойства — это значение столбца в строке.
keyColumnName нить Название столбца, значения которого станут ключами в преобразованной Map .
valueColumnName нить Название столбца, значения которого станут значениями в преобразованной Map .

Соответствующие разрешения

Никто.


Math

Объект, предоставляющий Math функции.

Синтаксис

const Math = require('Math');

// Retrieve the absolute value.
const absolute = Math.abs(-3);

// Round the input down to the nearest integer.
const roundedDown = Math.floor(3.6);

// Round the input up to the nearest integer.
const roundedUp = Math.ceil(2.2);

// Round the input to the nearest integer.
const rounded = Math.round(3.1);

// Return the largest argument.
const biggest = Math.max(1, 3);

// Return the smallest argument.
const smallest = Math.min(3, 5);

// Return the first argument raised to the power of the second argument.
const powerful = Math.pow(3, 1);

// Return the square root of the argument.
const unsquared = Math.sqrt(9);

Параметры

Параметры математических функций преобразуются в числа.

Соответствующие разрешения

Никто.


Object

Возвращает объект, предоставляющий методы Object .

Метод keys() обеспечивает поведение метода Object.keys() из стандартной библиотеки. Он возвращает массив имен перечисляемых свойств заданного объекта в том же порядке, что и в цикле for...in... Если входное значение не является объектом, оно будет преобразовано в объект.

Метод values() обеспечивает поведение метода Object.values() из стандартной библиотеки. Он возвращает массив значений перечисляемых свойств заданного объекта в том же порядке, что и в цикле for...in... Если входное значение не является объектом, оно будет преобразовано в объект.

Метод entries() обеспечивает поведение стандартного библиотечного метода Object.entries() . Он возвращает массив пар перечислимых свойств [key, value] заданного объекта в том же порядке, что и в цикле for...in... Если входное значение не является объектом, оно будет преобразовано в объект.

Метод freeze() обеспечивает поведение, аналогичное методу Object.freeze() из стандартной библиотеки. Замороженный объект больше нельзя изменить; замораживание объекта предотвращает добавление к нему новых свойств, удаление существующих свойств и изменение значений существующих свойств. freeze() возвращает тот же объект, который был передан. Примитивный или нулевой аргумент будет рассматриваться как замороженный объект и будет возвращен.

Метод delete() обеспечивает поведение оператора delete из стандартной библиотеки. Он удаляет заданный ключ из объекта, если объект не заморожен. Как и оператор delete из стандартной библиотеки, он возвращает true если первое входное значение ( objectInput ) является объектом, который не заморожен, даже если второе входное значение ( keyToDelete ) указывает на несуществующий ключ. Во всех остальных случаях он возвращает false . Однако он отличается от оператора delete из стандартной библиотеки следующими способами:

  • keyToDelete не может быть строкой, разделённой точками, которая указывает на вложенный ключ.
  • delete() не может использоваться для удаления элементов из массива.
  • delete() нельзя использовать для удаления каких-либо свойств из глобальной области видимости.

Синтаксис

Object.keys(objectInput)
Object.values(objectInput)
Object.entries(objectInput)
Object.freeze(objectInput)
Object.delete(objectInput, keyToDelete)

Параметры

Объект.ключи

Параметр Тип Описание
объектВвод любой Объект, ключи которого необходимо перечислить. Если входные данные не являются объектом, они будут преобразованы в объект.

Объект.значения

Параметр Тип Описание
объектВвод любой Объект, значения которого необходимо перечислить. Если входные данные не являются объектом, они будут преобразованы в объект.

Объект.записи

Параметр Тип Описание
объектВвод любой Объект, пары ключ/значение которого необходимо перечислить. Если входные данные не являются объектом, они будут преобразованы в объект.

Object.freeze

Параметр Тип Описание
объектВвод любой Объект, который нужно заморозить. Если входные данные не являются объектом, они будут рассматриваться как замороженный объект.

Object.delete

Параметр Тип Описание
объектВвод любой Объект, ключ которого нужно удалить.
keyToDelete нить Ключ верхнего уровня для удаления.

Пример

const Object = require('Object');

// The keys of an object are enumerated in an array.
const keys = Object.keys({foo: 'bar'});

// The values of an object are enumerated in an array.
const values = Object.values({foo: 'bar'});

// The key/value pairs of an object are enumerated in an array.
const entries = Object.entries({foo: 'bar'});

// The input object is frozen.
const frozen = Object.freeze({foo: 'bar'});

// The key is removed from the input object.
const obj1 = {deleteme: 'value'};
Object.delete(obj1, 'deleteme');
// Only a top-level key can be specified as the key to delete.
const obj2 = {nested: {key: 'value'}};
Object.delete(obj2, 'nested.key'); // This has no effect.
Object.delete(obj2.nested, 'key'); // This deletes the nested key.

parseUrl

Возвращает объект, содержащий все составляющие части заданного URL-адреса, аналогично объекту URL .

Для некорректно сформированных URL-адресов этот API вернет undefined . Для правильно отформатированных URL-адресов поля, отсутствующие в строке URL, будут иметь значение пустой строки, или, в случае searchParams , пустой объект.

Возвращаемый объект будет содержать следующие поля:

{
  href: string,
  origin: string,
  protocol: string,
  username: string,
  password: string,
  host: string,
  hostname: string,
  port: string,
  pathname: string,
  search: string,
  searchParams: Object<string, (string|Array)>,
  hash: string,
}

Пример

const parseUrl = require('parseUrl');

const urlObject = parseUrl('https://abc:xyz@example.com:8080/foo?param=val%2Cue#bar');

Синтаксис

parseUrl(url);

Параметры

Параметр Тип Описание
url нить Полный URL-адрес, который будет проанализирован.

Соответствующие разрешения

Никто.


queryPermission

Выполняет запрос разрешенных и ограниченных прав доступа. Возвращает логическое значение : true если разрешение предоставлено, false в противном случае.

Синтаксис

queryPermission(permission, functionArgs*)

Параметры

Параметр Тип Описание
permission нить Название разрешения.
functionArgs любой Аргументы функции различаются в зависимости от запрашиваемого разрешения. См. раздел «Аргументы функции» ниже.

Аргументы функции

sendPixel , injectScript , injectHiddenIframe : Второй параметр должен быть строкой URL.

writeGlobals , readGlobals : Второй параметр должен быть ключом, по которому производится запись или чтение.

readUrl : Для проверки возможности чтения всего URL-адреса дополнительные аргументы не требуются. Чтобы проверить возможность чтения конкретного компонента, передайте имя компонента в качестве второго аргумента:

if (queryPermission('readUrl','port')) {
  // read the port
}

Чтобы проверить, доступен ли для чтения конкретный ключ запроса, передайте ключ запроса в качестве третьего параметра:

if (queryPermission('readUrl','query','key')) {
  getUrlComponent(...);
}

Соответствующие разрешения

Никто.


readAnalyticsStorage

Извлекает данные, хранящиеся для аналитики, и возвращает объект с client_id и sessions .

  • client_id : Строка, представляющая идентификатор клиента, используемый для аналитики.
  • sessions : Массив объектов, содержащий информацию о текущих сессиях. Каждый объект включает в себя:
    • measurement_id : Строка, представляющая идентификатор измерения в целевом объекте аналитики.
    • session_id : Строка, представляющая собой метку времени, идентифицирующую текущую сессию.
    • session_number : Число, представляющее количество сессий, которые пользователь запустил до текущей сессии.

Синтаксис

const readAnalyticsStorage = require('readAnalyticsStorage');

const cookieOptions = {
  cookie_prefix: "xyz",
  cookie_domain: "google.com",
  cookie_path: "/",
};

readAnalyticsStorage(cookieOptions);

Параметры

Параметр Тип Описание
cookieOptions объект Дополнительные параметры для чтения файлов cookie с определенным cookie_prefix , cookie_domain или cookie_path .

Соответствующие разрешения

read_analytics_storage

Пример

const readAnalyticsStorage = require('readAnalyticsStorage');

const analyticsStorageData = readAnalyticsStorage();

sendOfflineEvent(analyticsStorageData.client_id, "tutorial_begin");

readCharacterSet

Возвращает значение объекта document.characterSet .

Синтаксис

readCharacterSet()

Параметры

Никто.

Соответствующие разрешения

read_character_set


readTitle

Возвращает значение document.title .

Синтаксис

readTitle()

Параметры

Никто.

Соответствующие разрешения

read_title


require

Импортирует встроенную функцию по имени. Возвращает функцию или объект , который можно вызвать из вашей программы. Возвращает undefined, если браузер не поддерживает встроенную функцию.

Синтаксис

require(name)

Параметры

Параметр Тип Описание
name нить Название функции для импорта.

Пример

const getUrl = require('getUrl');
const url = getUrl();

Соответствующие разрешения

Никто.


sendPixel

Выполняет GET-запрос к указанной конечной точке URL.

Синтаксис

sendPixel(url, onSuccess, onFailure)

Параметры

Параметр Тип Описание
url нить Куда отправить пиксель?
onSuccess функция Вызывается при успешной загрузке пикселя. Примечание: даже если запрос успешно отправлен, браузерам может потребоваться действительный ответ с изображением для выполнения метода onSuccess.
onFailure функция Вызывается при неудачной загрузке пикселя. Примечание: даже если запрос успешно отправлен, метод onFailure может быть выполнен, если сервер не вернет действительный ответ с изображением.

Соответствующие разрешения

send_pixel


setCookie

Устанавливает или удаляет cookie-файл с указанным именем, значением и параметрами.

Синтаксис

setCookie(name, value[, options, encode])

Параметры

Параметр Тип Описание
name нить Название файла cookie.
value нить Ценность файла cookie.
options объект Указывает атрибуты Domain, Path, Expires, Max-Age, Secure и SameSite . (См. раздел Options ниже.)
encode логический Определяет, следует ли кодировать значение cookie с помощью encodeURIComponent() JavaScript. По умолчанию — true .

Параметры

  • Домен: задается свойством options['domain'] , если оно присутствует. Установите это значение на 'auto' , чтобы попытаться записать cookie, используя максимально широкий домен, исходя из местоположения документа. Если это не удастся, будут предприняты попытки использовать более узкие поддомены. Если все они не удастся, будет предпринята попытка записать cookie без указания домена. Если значение не задано, будет предпринята попытка записать cookie без указания домена. Примечание: когда cookie без указанного домена записывается в document.cookie , пользовательский агент по умолчанию будет использовать домен cookie, равный хосту текущего местоположения документа.
  • Путь: задается параметром options['path'] , если он присутствует. Если в document.cookie записывается cookie без указанного пути, пользовательский агент по умолчанию будет использовать путь cookie, равный пути текущего местоположения документа.
  • Max-Age: устанавливается параметром options['max-age'] , если он присутствует.
  • Параметр Expires: задается параметром options['expires'] , если он присутствует. Если присутствует, это должна быть строка даты в формате UTC. Для форматирования Date для этого параметра можно использовать Date.toUTCString() .
  • Secure: устанавливается параметром options['secure'] , если он присутствует.
  • SameSite: устанавливается параметром options['samesite'] , если он присутствует.

Соответствующие разрешения

set_cookies


setDefaultConsentState

Отправляет в слой данных обновление согласия по умолчанию, которое будет обработано как можно скорее после завершения обработки текущего события и всех вызванных им тегов (или по истечении времени ожидания обработки тега). Гарантируется, что обновление будет обработано в этом контейнере до обработки любых элементов в очереди слоя данных. Подробнее о согласии .

Пример:

const setDefaultConsentState = require('setDefaultConsentState');

setDefaultConsentState({
  'ad_storage': 'denied',
  'analytics_storage': 'granted',
  'third_party_storage': 'denied',
  'region': ['US-CA'],
  'wait_for_update': 500
});

Синтаксис

setDefaultConsentState(consentSettings)

Параметры

Параметр Тип Описание
consentSettings объект Объект, определяющий состояние по умолчанию для указанных типов согласия.

Объект consentSettings представляет собой сопоставление произвольных строковых значений типа согласия с одним из значений 'granted' или 'denied' . Он поддерживает следующие значения:

Имя ключа Тип Описание
consentType нить Для каждого типа согласия можно установить значение «разрешено» или «отказано». Любое значение, отличное от «разрешено», будет рассматриваться как «отказано». Установка значения «не определено» не повлияет на его предыдущее значение.
region Множество Необязательный массив региональных кодов, указывающий, к какому региону применяются настройки согласия. Региональные коды выражаются с использованием страны и/или подразделений в формате ISO 3166-2.
wait_for_update число Задает значение в миллисекундах для управления временем ожидания перед отправкой данных. Используется с инструментами подтверждения согласия, загружаемыми асинхронно.

Соответствующие разрешения

Разрешение access_consent с правом записи для всех типов согласия в объекте consentSettings.


setInWindow

Устанавливает заданное значение в window по указанному ключу. По умолчанию этот метод не устанавливает значение в window , если в нем уже есть существующее значение. Установите overrideExisting в true , чтобы установить значение в window независимо от наличия существующего значения. Возвращает логическое значение : true если значение было успешно установлено, и false в противном случае.

Синтаксис

setInWindow(key, value, overrideExisting)

Параметры

Параметр Тип Описание
key нить Ключ в window , куда нужно поместить значение.
value * Значение, которое нужно установить в window .
overrideExisting логический Флаг, указывающий на то, что значение должно быть установлено в window , независимо от того, есть оно там или нет.

Соответствующие разрешения

access_globals


sha256

Вычисляет дайджест SHA-256 входных данных и вызывает функцию обратного вызова с дайджестом, закодированным в base64, если только объект options не указывает другую кодировку выходных данных.

Пример:

sha256('inputString', (digest) => {
  sendPixel('https://example.com/collect?id=' + digest);
  data.gtmOnSuccess();
}, data.gtmOnFailure);

sha256('inputString', (digest) => {
  sendPixel('https://example.com/collect?id=' + digest);
  data.gtmOnSuccess();
}, data.gtmOnFailure, {outputEncoding: 'hex'});

Синтаксис

sha256(input, onSuccess, onFailure = undefined, options = undefined)

Параметры

Параметр Тип Описание
input нить Строка, для которой нужно вычислить хеш.
onSuccess функция Вызов осуществляется с полученным дайджестом, закодированным в base64, если объект options не указывает другую кодировку вывода.
onFailure функция Вызывается в случае ошибки при вычислении дайджеста или если браузер не имеет встроенной поддержки SHA256. Функция обратного вызова передается объекту, содержащему имя ошибки и сообщение.
options объект Необязательный объект параметров для указания кодировки выходных данных. Если указан, объект должен содержать ключ outputEncoding со значением, равным одному из base64 или hex .

Соответствующие разрешения

Никто.


templateStorage

Возвращает объект с методами для доступа к хранилищу шаблонов. Хранилище шаблонов позволяет совместно использовать данные между выполнениями одного шаблона. Данные, хранящиеся в хранилище шаблонов, сохраняются на протяжении всего времени существования страницы.

Синтаксис

const templateStorage = require('templateStorage');

templateStorage.getItem(key);

templateStorage.setItem(key, value);

templateStorage.removeItem(key);

// Deletes all stored values for the template.
templateStorage.clear();

Соответствующие разрешения

access_template_storage

Пример

const templateStorage = require('templateStorage');
const sendPixel = require('sendPixel');

// Ensure sendPixel is called only once per page.
if (templateStorage.getItem('alreadyRan')) {
  data.gtmOnSuccess();
  return;
}

templateStorage.setItem('alreadyRan', true);

sendPixel(
  data.oncePerPagePixelUrl,
  data.gtmOnSuccess,
  () => {
    templateStorage.setItem('alreadyRan', false);
    data.gtmOnFailure();
  });

toBase64

API toBase64 позволяет кодировать строку в представление Base64.

Синтаксис

toBase64(input)

Параметры

Параметр Тип Описание
input нить Строка для кодирования.

Пример

const toBase64 = require('toBase64');

const base64Hello = toBase64('hello');

Соответствующие разрешения

Никто


updateConsentState

Отправляет обновление согласия в слой данных для обработки как можно скорее после завершения обработки текущего события и всех вызванных им тегов (или истечения времени ожидания обработки тегов). Гарантируется, что обновление будет обработано в этом контейнере до обработки любых элементов в очереди слоя данных. Подробнее о согласии .

Пример:

const updateConsentState = require('updateConsentState');

updateConsentState({
  'ad_storage': 'granted',
  'analytics_storage': 'denied',
  'third_party_storage': 'granted',
});

Синтаксис

updateConsentState(consentSettings)

Параметры

Параметр Тип Описание
consentSettings объект Объект, обновляющий состояние для указанных типов согласия.

Объект consentSettings представляет собой сопоставление произвольных строковых значений типа согласия с одним из значений 'granted' или 'denied' . Он поддерживает следующие значения:

Имя ключа Тип Описание
consentType нить Для каждого типа согласия можно установить значение «предоставлено» или «отказано». Любое значение, отличное от «предоставлено», будет рассматриваться как «отказано». Установка значения «не определено» не повлияет на его предыдущее значение.

Соответствующие разрешения

Разрешение access_consent с правом записи для всех типов согласия в объекте consentSettings.


Тестирование API

Эти API работают с изолированными JavaScript-тестами для создания тестов для пользовательских шаблонов в Google Tag Manager. Для работы с этими тестовыми API не требуется оператор require() . Узнайте больше о тестах пользовательских шаблонов .


assertApi

Возвращает объект-сопоставитель, который можно использовать для удобного выполнения проверок относительно заданного API.

Синтаксис

assertApi(apiName)

Параметры

Параметр Тип Описание
apiName нить Название проверяемого API; та же строка, что и передана в require() .

Совпадающие

  • Subject.wasCalled()
  • Subject.wasNotCalled()
  • Subject.wasCalledWith(...expected)
  • Subject.wasNotCalledWith(...expected)

Примеры

assertApi('sendPixel').wasCalled();
assertApi('getUrl').wasNotCalled();
assertApi('makeNumber').wasCalledWith('8');
assertApi('setInWindow').wasNotCalledWith('myVar', 'theWrongValue');

assertThat

API assertThat создан по образцу библиотеки Google [Truth]. Он возвращает объект, который можно использовать для гибкой проверки значений объекта. Сбой проверки немедленно остановит тест и пометит его как неудачный. Однако сбой в одном тесте не повлияет на другие тестовые случаи.

Синтаксис

assertThat(actual, opt_message)

Параметры

Параметр Тип Описание
actual любой Значение, используемое в проверках беглости речи.
opt_message нить Дополнительное сообщение, которое следует вывести в случае неудачи проверки.

Совпадающие

Совместитель Описание
isUndefined() Утверждает, что субъект undefined .
isDefined() Утверждает, что субъект не является undefined .
isNull() Утверждает, что субъект является null .
isNotNull() Утверждает, что субъект не является null .
isFalse() Утверждает, что субъект является false .
isTrue() Утверждает, что утверждение true .
isFalsy() Утверждает, что субъект является ложным. Ложными значениями являются undefined , null , false , NaN , 0 и '' (пустая строка).
isTruthy() Утверждает, что субъект является истинным. Ложные значения: undefined , null , false , NaN , 0 и '' (пустая строка).
isNaN() Утверждается, что субъектом является значение NaN.
isNotNaN() Утверждает, что субъект представляет собой любое значение, кроме NaN.
isInfinity() Утверждает, что субъект представляет собой положительную или отрицательную бесконечность.
isNotInfinity() Утверждает, что субъектом является любое значение, кроме положительной или отрицательной бесконечности.
isEqualTo(expected) Утверждает, что объект равен заданному значению. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
isNotEqualTo(expected) Утверждает, что значение объекта не равно заданному значению. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
isAnyOf(...expected) Утверждает, что значение объекта равно одному из заданных значений. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
isNoneOf(...expected) Утверждает, что объект не равен ни одному из заданных значений. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
isStrictlyEqualTo(expected) Утверждает, что субъект строго равен ( === ) заданному значению.
isNotStrictlyEqualTo(expected) Утверждает, что субъект не является строго равным ( !== ) заданному значению.
isGreaterThan(expected) Утверждает, что значение объекта больше ( > ) заданного значения в упорядоченном сравнении.
isGreaterThanOrEqualTo(expected) Утверждает, что значение в упорядоченном сравнении больше или равно ( >= ) заданному значению.
isLessThan(expected) Утверждает, что значение объекта меньше ( < ) заданного значения в упорядоченном сравнении.
isLessThanOrEqualTo(expected) Утверждает, что значение объекта меньше или равно ( <= ) заданному значению в упорядоченном сравнении.
contains(...expected) Утверждает, что объект представляет собой массив или строку, содержащую все заданные значения в любом порядке. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
doesNotContain(...expected) Утверждает, что объект представляет собой массив или строку, не содержащую ни одного из заданных значений. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
containsExactly(...expected) Утверждается, что объект представляет собой массив, содержащий все заданные значения в любом порядке и не содержащий других значений. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
doesNotContainExactly(...expected) Утверждает, что объект представляет собой массив, содержащий набор значений, отличных от заданных значений, в любом порядке. Это сравнение значений, а не сравнение ссылок. Содержимое объектов и массивов сравнивается рекурсивно.
hasLength(expected) Проверяет, что объект является массивом или строкой заданной длины. Проверка всегда завершается неудачей, если значение не является массивом или строкой.
isEmpty() Проверяет, что объект представляет собой пустой массив или строку (длина = 0). Проверка всегда завершается неудачей, если значение не является массивом или строкой.
isNotEmpty() Проверяет, что объект является массивом или строкой, не пустой (длина > 0). Проверка всегда завершается неудачей, если значение не является массивом или строкой.
isArray() Утверждает, что тип объекта — массив.
isBoolean() Утверждает, что тип объекта является логическим (булевым).
isFunction() Утверждает, что тип объекта является функцией.
isNumber() Утверждает, что тип субъекта — число.
isObject() Утверждает, что тип субъекта — объект.
isString() Утверждает, что тип объекта — строка.

Примеры

assertThat(undefined).isUndefined();
assertThat(id, 'ID must be defined').isDefined();
assertThat(null).isNull();
assertThat(undefined).isNotNull();
assertThat(true).isTrue();
assertThat(false).isFalse();
assertThat(1).isTruthy();
assertThat('').isFalsy();
assertThat(1/0).isInfinity();
assertThat(0).isNotInfinity();
assertThat(-'foo').isNaN();
assertThat(100).isNotNaN();
assertThat(sentUrl).isEqualTo('https://endpoint.example.com/?account=12345');
assertThat(category).isNotEqualTo('premium');
assertThat(5).isAnyOf(1, 2, 3, 4, 5);
assertThat(42).isNoneOf('the question', undefined, 41.9);
assertThat('value').isStrictlyEqualTo('value');
assertThat('4').isNotStrictlyEqualTo(4);
assertThat(['a', 'b', 'c']).contains('a', 'c');
assertThat(['x', 'y', 'z']).doesNotContain('f');
assertThat(['1', '2', '3']).containsExactly('3', '2', '1');
assertThat(['4', '5']).doesNotContainExactly('4');
assertThat('a string').hasLength(8);
assertThat([]).isEmpty();
assertThat('another string').isNotEmpty();

fail

Немедленно завершает текущую проверку и выводит заданное сообщение, если оно предоставлено.

Синтаксис

fail(opt_message);

Параметры

Параметр Тип Описание
opt_message нить Необязательный текст сообщения об ошибке.

Пример

fail('This test has failed.');

mock

mock API позволяет переопределять поведение изолированных API. Имитационный API безопасен для использования в шаблонном коде, но работает только в тестовом режиме. Имитационные объекты сбрасываются перед каждым запуском теста.

Синтаксис

mock(apiName, returnValue);

Параметры

Параметр Тип Описание
apiName нить Название API, который нужно имитировать; та же строка, что и передана в require()
returnValue любой Возвращаемое значение для API или функции, вызываемой вместо API. Если returnValue — это функция, то вместо API в изолированной среде вызывается именно эта функция; если returnValue — это что-либо, кроме функции, то вместо API в изолированной среде возвращается значение, соответствующее этой функции.

Примеры

mock('encodeUri', "https://endpoint.example.com/?account=12345");
mock('sendPixel', function(url, onSuccess, onFailure) {
    onSuccess();
});

mockObject

API mockObject позволяет переопределять поведение изолированных API, возвращающих объект. API безопасен для использования в шаблонном коде, но работает только в тестовом режиме. Моки сбрасываются перед каждым запуском теста.

Синтаксис

mockObject(apiName, objectMock);

Параметры

Параметр Тип Описание
apiName нить Название API, который нужно имитировать; та же строка, что и передана в require()
objectMock объект Возвращаемое значение для API или функции, вызываемой вместо API. Должен быть объектом.

Примеры

const storage = {};
mockObject('localStorage', {
  setItem: (key, value) => {storage[key] = value;},
  getItem: (key) => storage[key],
});

runCode

Runs the code for the template, ie the content of the Code tab, in the current test environment with a given input data object.

Синтаксис

runCode(data)

Параметры

Параметр Тип Описание
data объект Data object to be used in the test.

Возвращаемое значение

Returns the value of a variable for variable templates; returns undefined for all other template types.

Пример

runCode({field1: 123, field2: 'value'});