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

В этом документе описываются разрешения для пользовательских веб-шаблонов.


Каждое разрешение:

  • Проверяется API, которым это необходимо.
  • Автоматически обнаруживается в изолированном JavaScript на основе используемых API. Это происходит при внесении изменений в редактор шаблонов (для быстрой обратной связи) и при компиляции кода (для проверки правильности применения разрешений).
  • Можно редактировать в редакторе пользовательских шаблонов, чтобы сделать разрешение более конкретным.
  • Доступен для запросов в изолированном JavaScript через API queryPermission .

access_globals

Отображаемое имя: Доступ к глобальным переменным

Описание: Обеспечивает доступ к глобальной переменной (потенциально включая конфиденциальные API).

Конфигурация: Список ключей, к которым возможен доступ. Каждый ключ представляет собой путь, разделённый точками. Например: foo.bar Первый токен в каждом пути не должен быть предопределённым ключом в глобальной области видимости браузера или ключевым словом JavaScript. Имеет флажки для чтения, записи и выполнения, регулирующие доступ.

Требуется для: setInWindow , copyFromWindow , callInWindow , createQueue , createArgumentsQueue

Сигнатура запроса: queryPermission('access_globals', 'read', <key to read from>) или queryPermission('access_globals', 'write', <key to write to>) или queryPermission('access_globals', 'readwrite', <key to read and write>) или queryPermission('access_globals', 'execute', <key of function to execute>)

Примечания: контролирует, может ли пользовательский шаблон считывать и/или записывать глобальные значения.

Пример кода

const queryPermission = require('queryPermission');
const createQueue = require('createQueue');
if (queryPermission('access_globals', 'readwrite', 'dataLayer')) {
  const dataLayerPush = createQueue('dataLayer');
}

доступ_локальное_хранилище

Отображаемое имя: Доступ к локальному хранилищу

Описание: Позволяет получить доступ к указанным ключам в локальном хранилище.

Конфигурация: Список ключей локального хранилища, к которым возможен доступ. Это простой массив ключей без подстановочных знаков. Имеет флажки чтения и записи, управляющие доступом.

Требуется для: localStorage

Сигнатура запроса: queryPermission('access_local_storage', 'read', <key to read from>) или queryPermission('access_local_storage', 'write', <key to write to>) или queryPermission('access_local_storage', 'readwrite', <key to read and write>)

Пример кода

const queryPermission = require('queryPermission');
const localStorage = require('localStorage');
const key = 'my_key';
if (queryPermission('access_local_storage', 'read', key)) {
  const value = localStorage.getItem(key);
}

хранилище_шаблонов_доступа

Отображаемое имя: Доступ к хранилищу шаблонов

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

Конфигурация: нет

Требуется для: templateStorage

Сигнатура запроса: queryPermission('access_template_storage')

Пример кода

const queryPermission = require('queryPermission');
const templateStorage = require('templateStorage');
const key = 'my_key';
if (queryPermission('access_template_storage')) {
  const value = templateStorage.getItem(key);
}

получить_куки

Отображаемое имя: Считывает значение(я) cookie-файла

Описание: Считывает значения файлов cookie с указанным именем.

Конфигурация: Список имен файлов cookie, разрешенных для чтения.

Требуется для: getCookieValues

Сигнатура запроса: queryPermission('get_cookies', <name>)

Примечания: определяет, можно ли прочитать cookie-файл, в зависимости от его имени.

Пример кода

const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
  cookieValues = getCookieValues(cookieName);
}

получить_реферер

Отображаемое имя: URL-адрес реферера чтения

Описание: Разрешает доступ для чтения к ограниченным частям реферера.

Конфигурация: следующие логические значения определяют, какая часть реферера может быть прочитана. Определённая часть реферера может быть прочитана только в том случае, если соответствующая часть имеет true . Вызывающий объект может вызвать getReferrerUrl без указания компонента, чтобы получить полный URL реферера, если все эти логические значения имеют значение true . Если значение не задано, значение по умолчанию — all . Если значение задано, оно должно быть массивом компонентов, где компонент может быть одним из следующих: protocol , host , port , path , query или extension .

queryKeys : Если выбран параметр query, автор шаблона может дополнительно ограничить набор ключей запроса, которые он может считывать. Это простой массив ключей без подстановочных знаков.

Требуется: getReferrerUrl , getReferrerQueryParameters

Сигнатура запроса: queryPermission('get_referrer', <url_component>)

Пример кода

const queryPermission = require('queryPermission');
const getReferrerUrl = require('getReferrerUrl');
let referrer;
if (queryPermission('get_referrer', 'query')) {
  referrer = getReferrerUrl('queryParams');
}

получить_url

Отображаемое имя: URL-адрес чтения

Описание: Возвращает часть или весь URL-адрес текущей страницы.

Конфигурация: Следующие логические значения определяют, какая часть URL может быть прочитана. Любая часть URL может быть прочитана только в том случае, если соответствующая часть имеет значение true. Вызывающий объект может вызвать getUrl без указания компонента для получения всего URL, только если все эти логические значения имеют значение true . Если значение не задано, значение по умолчанию — all . Если значение задано, оно должно быть массивом компонентов, где компонент может быть одним из следующих: protocol , host , port , path , query , extension , или fragment .

queryKeys : Если выбран параметр query, автор шаблона может дополнительно ограничить набор ключей запроса, которые он может считывать. Это простой массив ключей без подстановочных знаков.

Требуется: getUrl

Сигнатура запроса: queryPermission('get_url', <optional url component>, <optional query key>)

Если компонент URL указан, он должен быть одним из следующих: 'protocol' , 'host' , 'port' , 'path' , 'query' , 'extension' , 'fragment' . Если этот параметр пропущен, запрос разрешения представляет собой запрос на доступ ко всему URL-адресу.

Если указан ключ запроса, он должен быть аргументом строки запроса, который код шаблона хочет прочитать.

Примечания: Определяет, может ли пользовательский шаблон читать данные из текущего местоположения. Позволяет ограничить доступ к определённой части местоположения.

Пример кода

const queryPermission = require('queryPermission');
const getUrl = require('getUrl');
if (queryPermission('get_url', 'query', 'gclid')) {
  const gclid = getUrl('query', false, null, 'gclid');
}

inject_hidden_iframe

Отображаемое имя: Вставляет скрытые фреймы

Описание: внедряет невидимый iframe с заданным URL.

Конфигурация: список шаблонов URL

Требуется для: injectHiddenIframe

Сигнатура запроса: queryPermission('inject_hidden_iframe', <url>)

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

Пример кода

const queryPermission = require('queryPermission');
const injectHiddenIframe = require('injectHiddenIframe');
const url = 'https://www.example.com/iframes';
if (queryPermission('inject_hidden_iframe', url)) {
  injectHiddenIframe(url);
}

inject_script

Отображаемое имя: Внедряет скрипты

Описание: Внедряет скрипт на страницу.

Конфигурация: список шаблонов URL

Требуется для: injectScript

Сигнатура запроса: queryPermission('inject_script', <url>)

Примечания: определяет, может ли пользовательский шаблон внедрять JavaScript, а также из какого источника он может это делать.

Пример кода

const queryPermission = require('queryPermission');
const injectScript = require('injectScript');
const url = 'https://www.example.com?api.js';
if (queryPermission('inject_script', url)) {
  injectScript(url);
}

ведение журнала

Отображаемое имя: Журналы на консоли

Описание: Журналы консоли разработчика и режима предварительного просмотра GTM.

Конфигурация: возможность включить ведение журнала в рабочей среде. По умолчанию ведение журнала включено только в режимах отладки и предварительного просмотра. Если разрешение не предоставлено, logToConsole не выдаст ошибку, но подавит вывод сообщения журнала.

Требуется для: logToConsole

Сигнатура запроса: queryPermission('logging')

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

Пример кода

const queryPermission = require('queryPermission');
const logToConsole = require('logToConsole');
// Note that it's fine to call log, since the log call will be ignored if
// logging isn't permitted in the current environment.
logToConsole('diagnostic info');

слой_данных_чтения

Отображаемое имя: Считывает слой данных

Описание: Считывает данные из dataLayer.

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

Требуется для: copyFromDataLayer

Сигнатура запроса: queryPermission('read_data_layer', <data layer key to read from>)

Примечания: контролирует, может ли пользовательский шаблон считывать данные со слоя данных.

Пример кода

const queryPermission = require('queryPermission');
const copyFromDataLayer = require('copyFromDataLayer');
const dlKey = 'foo.bar';
if (queryPermission('read_data_layer', dlKey)) {
  const dlContents = copyFromDataLayer(dlKey);
}

read_analytics_storage

Отображаемое имя: чтение аналитического хранилища

Описание: Это позволяет шаблонам считывать сохраненные аналитические данные, такие как идентификаторы клиентов.

Конфигурация: нет

Требуется для: readAnalyticsStorage

Сигнатура запроса: queryPermission('read_analytics_storage')

Примечания: определяет, может ли пользовательский шаблон считывать данные из хранилища аналитики.

Пример кода

const queryPermission = require('queryPermission');
const readAnalyticsStorage = require('readAnalyticsStorage');
if (queryPermission('read_analytics_storage')) {
  const value = readAnalyticsStorage();
}

read_character_set

Отображаемое имя: Читает набор символов документа

Описание: Читает document.characterSet .

Конфигурация: нет

Требуется для: readCharacterSet

Сигнатура запроса: queryPermission('read_character_set')

Примечания: определяет, может ли пользовательский шаблон читать document.characterSet .

Пример кода

const queryPermission = require('queryPermission');
const readCharacterSet = require('readCharacterSet');
if (queryPermission('read_character_set')) {
  const characterSet = readCharacterSet();
}

read_container_data

Отображаемое имя: Считывает данные контейнера

Описание: Считывает данные о контейнере.

Конфигурация: нет

Требуется для: getContainerVersion

Сигнатура запроса: queryPermission('read_container_data')

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

Пример кода

const queryPermission = require('queryPermission');
const getCookieValues = require('getContainerVersion');
let version;
if (queryPermission('read_container_data')) {
  version = getContainerVersion();
}

read_event_metadata

Отображаемое имя: Считывает метаданные события

Описание: Считывает метаданные событий в обратных вызовах событий.

Конфигурация: нет

Требуется для: addEventCallback

Сигнатура запроса: queryPermission('read_event_metadata')

Примечания: контролирует, может ли пользовательский шаблон считывать метаданные событий в обратных вызовах.

Пример кода

const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
  addEventCallback((containerId, eventMetadata) => {
    // Read event metadata.
  });
}

read_title

Отображаемое имя: читает название документа.

Описание: Читает document.title .

Конфигурация: нет

Требуется: readTitle

Сигнатура запроса: queryPermission('read_title')

Примечания: определяет, может ли пользовательский шаблон читать document.title .

Пример кода

const queryPermission = require('queryPermission');
const readTitle = require('readTitle');
if (queryPermission('read_title')) {
  const title = readTitle();
}

send_pixel

Отображаемое имя: Отправляет пиксели

Описание: Отправляет GET-запрос на указанный URL. Ответ не обрабатывается.

Конфигурация: список разрешенных шаблонов URL.

Требуется: sendPixel

Сигнатура запроса: queryPermission('send_pixel', <url>)

Примечания: определяет, может ли пользовательский шаблон отправлять запросы GET и в какой источник он может это делать.

Пример кода

const queryPermission = require('queryPermission');
const sendPixel = require('sendPixel');
const url = 'https://www.example.com?foo=3';
if (queryPermission('send_pixel', url)) {
  sendPixel(url);
}

set_cookies

Отображаемое имя: Устанавливает cookie-файл

Описание: Устанавливает cookie-файл с указанным именем и параметрами.

Конфигурация: таблица разрешенных имен файлов cookie, каждое из которых имеет дополнительные ограничения по имени, домену, пути, атрибуту secure и сроку действия.

Требуется: setCookie

Сигнатура запроса: queryPermission('set_cookies', <name>, <options>)

Примечания: определяет, можно ли записать cookie-файл, в зависимости от имени cookie-файла, домена, пути, атрибута secure и срока действия.

Пример кода

const queryPermission = require('queryPermission');
const setCookie = require('setCookie');
const options = {
  'domain': 'www.example.com',
  'path': '/',
  'max-age': 60*60*24*365,
  'secure': true
};
if (queryPermission('set_cookies', 'info', options)) {
  setCookie('info', 'xyz', options);
}

write_data_layer

Отображаемое имя: записывает слой данных

Описание: Записывает данные в dataLayer.

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

Требуется для: gtagSet

Сигнатура запроса: queryPermission('write_data_layer', <data layer key to write from>)

Примечания: контролирует, может ли пользовательский шаблон записывать данные в слой данных.

Пример кода

const queryPermission = require('queryPermission');
const gtagSet = require('gtagSet');
const dlKey = 'foo.bar';
if (queryPermission('write_data_layer', dlKey)) {
  gtagSet({dlKey: 'baz'});
}