Правила для пользовательских шаблонов

Правила задаются на веб-странице. При выполнении кода они применяются к определениям пользовательских шаблонов Менеджера тегов для контроля использования некоторых функций и возможностей API. Правила реализуются с помощью API gtag('policy', ...) .

API gtag('policy', ...) требует определения dataLayer и gtag(). Убедитесь, что dataLayer и gtag() определены в коде до вызова gtag('policy', ...) в скрипте:

window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}

Используйте API gtag('policy', ...) на веб-странице, чтобы установить правила для разрешений пользовательских шаблонов:

gtag('policy', <policy_type>, <function>)

Аргументом <policy_type> может быть любой поддерживаемый тип разрешения, например inject_script. Правило будет вызываться каждый раз, когда контейнеру потребуется проверить право на использование разрешения.

gtag('policy', 'inject_script', ...)

Если требуется взаимодействие со всеми правилами, используйте аргумент 'all'.

gtag('policy', 'all', ...)

Третий аргумент (<function>) описывает функцию, которая реализует правило:

function(container, policy, data){...}
  • container – идентификатор контейнера Менеджера тегов (например, 'GTM-1234').
  • policy – строковое значение, которое задает тип правила для проверки.
  • data – объект, содержащий всю необходимую информацию для этого типа правила (например, 'url' для разрешения 'send_pixel').

Когда запрос на разрешение возвращает false или выдает исключение, функция policy отклоняет его. Если включен режим предварительного просмотра, все исключения для типов string и Error появятся в разделе Ошибки на панели отладки. В случае запросов на проверку сразу нескольких правил будут вызваны все проверки – и каждая из них сможет отклонить соответствующий запрос.

Ниже приведен пример создания правила для проверки разрешения 'inject_script'.

gtag('policy', 'inject_script', function (container, policy, data) {

  // reference the url of the script to be injected
  let url = data.url || '';

  // if the url of the injected script exactly matches, allow it.
  // otherwise throw an error
  if (url === 'https://scripts.example.com/analytics.js') {
    return true;
  } else {
    throw 'Only permitted to inject https://scripts.example.com/analytics.js';
  }
});

Аргумент 'all' в примере ниже используется для проверки сценариев применения нескольких правил:

gtag('policy', 'all', function(container, policy, data) {

  // Only set policy for 1 specific container.
  // This enables other containers loaded on the page to
  // operate without restrictions on permissions.
  if (container != 'GTM-4321') return true;

  // Since the policy is ‘all’, adjust permissions conditionally
  switch(policy) {

    case 'send_pixel':
      return true;

    case 'write_globals':
      return data.key && data.key == '_gaq';

    case 'inject_script':
      let url = data.url || '';
      if (url.indexOf('https://example.com') != 0)
        throw 'Only example.com scripts are permitted';

    default:
      // IT staff decides that all unknown permissions
      // are rejected.
      return false;
  }
});