В этом документе описываются разрешения для пользовательских веб-шаблонов.
Каждое разрешение:
- Проверяется 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'});
}