В этой статье описаны разрешения, требующиеся для пользовательских веб-шаблонов.
Каждое разрешение:
- проверяется тем 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');
}
access_local_storage
Отображаемое название: "Доступ к локальному хранилищу".
Описание: открывает доступ к указанным ключам в локальном хранилище.
Настройки: необходимо добавить список ключей в локальном хранилище, к которым разрешен доступ, с помощью простого массива, не содержащего подстановочных знаков. Предусмотрены флажки для управления доступом на чтение и запись.
Требуется: для 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);
}
access_template_storage
Отображаемое название: "Доступ к хранилищу шаблона".
Описание: открывает доступ к временному хранилищу шаблонов, которое может использоваться в течение всего времени существования страницы.
Настройки: нет.
Требуется: для 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);
}
get_cookies
Отображаемое название: считывает значения из файла 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);
}
get_referrer
Отображаемое название: "Просмотр URL перехода".
Описание: разрешает доступ для чтения к более коротким фрагментам URL перехода.
Настройки: следующие логические значения определяют, какая часть URL перехода будет доступна для чтения. Часть URL будет доступна для чтения, если для нее задано значение true
. Если значение true
будет задано для всех частей, то функцию getReferrerUrl
можно вызвать, даже если не указан компонент, определяющий доступ к полному URL перехода. По умолчанию используется значение all
. Если значение задано, оно должно быть массивом компонентов, каждый из которых относится к одному из следующих типов: protocol
, host
, port
, path
, query
или extension
.
queryKeys
: если запрос выбран, автор шаблона может ограничить набор доступных для чтения ключей с помощью простого массива, не содержащего подстановочных знаков.
Требуется: для 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');
}
get_url
Отображаемое название: Reads URL.
Описание: возвращает весь URL текущей страницы или его часть.
Настройки: доступность частей URL для чтения определяется перечисленными в конце абзаца логическими значениями. Часть URL будет доступна для чтения, если для нее задано значение true. Если в вызове getUrl
не указать компоненты, будет получен полный URL, но только при условии, что всем его компонентам присвоено логическое значение true
. По умолчанию используется значение all
. Если значение задано, оно должно быть массивом компонентов, каждый из которых относится к одному из следующих типов: protocol
, host
, port
, path
, query
, extension
или fragment
.
queryKeys
: если запрос выбран, автор шаблона может ограничить набор доступных для чтения ключей с помощью простого массива, не содержащего подстановочных знаков.
Требуется: для getUrl
.
Подпись запроса: queryPermission('get_url', <optional url component>,
<optional query key>)
.
Компонент URL (если указан) должен относиться к одному из следующих типов: 'protocol'
, 'host'
, 'port'
, 'path'
, 'query'
, 'extension'
, 'fragment'
. Если такие компоненты не указаны, будет выполнен запрос на получение всего URL.
В качестве ключа запроса следует указывать только аргумент со строкой запроса, которую будет считывать код шаблона.
Примечание. Этот ключ определяет, может ли пользовательский шаблон считывать данные 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".
Описание: внедряет невидимое окно 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);
}
logging
Отображаемое название: "Вход в консоль".
Описание. Передает данные журнала в консоль разработчика и делает их доступными в режиме предварительного просмотра Google Менеджера тегов.
Настройки: определяет возможность ведения журнала в рабочей версии. По умолчанию журнал ведется только в режиме отладки (предварительного просмотра). Если не предоставить разрешение, 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');
read_data_layer
Отображаемое название: "Чтение уровня данных".
Описание: считывает данные с 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_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, в зависимости от следующих его параметров: имени, домена и пути, атрибута 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);
}