Permisos de plantillas personalizadas

En este documento, se describen los permisos de las plantillas personalizadas de la Web.


Cada permiso tiene las siguientes características:

  • Verificados por las APIs que los requieren.
  • Se detecta automáticamente en JavaScript de zona de pruebas según las APIs que se usan. Esto sucede a medida que se realizan ediciones en el editor de plantillas personalizadas (para un bucle de comentarios rápido) y cuando se compila el código (para validar que se apliquen los permisos correctos).
  • Se puede editar en el editor de plantillas personalizadas para que el permiso sea más específico.
  • Se puede consultar en JavaScript de zona de pruebas a través de la API de queryPermission.

access_globals

Nombre visible: Accede a las variables globales.

Descripción: Permite el acceso a una variable global (posiblemente se incluyen APIs sensibles).

Configuración: Lista de claves a las que se puede acceder. Cada clave es una ruta separada por puntos. Por ejemplo: foo.bar El primer token de cada ruta de acceso no debe ser una clave predefinida en el alcance global del navegador ni una palabra clave de JavaScript. Tiene casillas de verificación de lectura, escritura y ejecución que rigen el acceso.

Obligatorio para: setInWindow, copyFromWindow, callInWindow, createQueue y createArgumentsQueue

Firma de la consulta: queryPermission('access_globals', 'read', <key to read from>) o queryPermission('access_globals', 'write', <key to write to>), o bien queryPermission('access_globals', 'readwrite', <key to read and write>) o queryPermission('access_globals', 'execute', <key of function to execute>)

Notas: Controla si una plantilla personalizada puede leer o escribir en valores globales.

Código de ejemplo

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

access_local_storage

Nombre visible: Accede al almacenamiento local.

Descripción: Permite el acceso a las claves especificadas en el almacenamiento local.

Configuración: Lista de claves de almacenamiento local a las que se puede acceder. Este es un arreglo simple de claves, sin comodines. Tiene casillas de verificación de lectura y escritura que rigen el acceso.

Obligatorio para: localStorage

Firma de la consulta: queryPermission('access_local_storage', 'read', <key to read from>), queryPermission('access_local_storage', 'write', <key to write to>) o queryPermission('access_local_storage', 'readwrite', <key to read and write>)

Código de ejemplo

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

Nombre visible: Accede al almacenamiento de plantillas.

Descripción: Permite el acceso al almacenamiento temporal para plantillas que pueden permanecer durante todo el ciclo de vida de la página.

Configuración: ninguna

Obligatorio para: templateStorage

Firma de la consulta: queryPermission('access_template_storage')

Código de ejemplo

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

get_cookies

Nombre visible: Lee los valores de las cookies.

Descripción: Lee los valores de las cookies con el nombre especificado.

Configuración: Lista de nombres de cookies que se permiten para la lectura.

Obligatorio para: getCookieValues

Firma de la consulta: queryPermission('get_cookies', <name>)

Notas: Determina si una cookie se puede leer en función de su nombre.

Código de ejemplo

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

get_referrer

Nombre visible: Lee la URL de referencia.

Descripción:Permite el acceso de lectura a partes reducidas del referente.

Configuración: Los siguientes booleanos determinan qué parte de la URL de referencia se puede leer. Una parte determinada de la URL de referencia solo se puede leer si la parte correspondiente es true. El llamador puede llamar a getReferrerUrl sin un componente especificado para obtener la URL de referencia completa si todos estos valores booleanos se configuran como true. Si no se establece ningún valor, el valor predeterminado es all. Si se establece un valor, el valor debe ser un array de componentes en el que un componente sea uno de los siguientes: protocol, host, port, path, query o extension.

queryKeys: Si se selecciona la consulta, el autor de la plantilla puede limitar aún más el conjunto de claves de consulta desde las que puede leer. Este es un arreglo simple de claves, sin comodines.

Obligatorio para: getReferrerUrl, getReferrerQueryParameters

Firma de la consulta: queryPermission('get_referrer', <url_component>)

Código de ejemplo

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

get_url

Nombre visible: Lee la URL.

Descripción: Muestra una parte o la totalidad de la URL de la página actual.

Configuración: Los siguientes booleanos determinan qué parte de la URL se puede leer. Una parte determinada de la URL solo se puede leer si la parte correspondiente es verdadera. El llamador puede llamar a getUrl sin un componente especificado para obtener la URL completa solo si todos estos booleanos se configuran como true. Si no se establece ningún valor, el valor predeterminado es all. Si se establece un valor, el valor debe ser un array de componentes en el que un componente sea uno de los siguientes: protocol, host, port, path, query, extension o fragment.

queryKeys: Si se selecciona la consulta, el autor de la plantilla puede limitar aún más el conjunto de claves de consulta desde las que puede leer. Este es un arreglo simple de claves, sin comodines.

Obligatorio para: getUrl

Firma de la consulta: queryPermission('get_url', <optional url component>, <optional query key>)

Si se proporciona, el componente de URL debe ser 'protocol', 'host', 'port', 'path', 'query', 'extension' o 'fragment'. Si se omite, la consulta de permisos es una solicitud de acceso a toda la URL.

Si se proporciona, la clave de consulta debe ser el argumento de la cadena de consulta que el código de la plantilla desea leer.

Notas: Controla si una plantilla personalizada puede leer desde la ubicación actual. Permite limitar la información a una parte específica de la ubicación.

Código de ejemplo

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

inject_hidden_iframe

Nombre visible: Inyecta los iframes ocultos.

Descripción: Inyecta un iframe invisible con una URL determinada.

Configuración: Lista de patrones de URL

Obligatorio para: injectHiddenIframe

Firma de la consulta: queryPermission('inject_hidden_iframe', <url>)

Notas: Determina si una plantilla personalizada puede insertar un iframe invisible y desde qué origen puede hacerlo.

Código de ejemplo

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

Nombre visible: Inyecta secuencias de comandos.

Descripción: Inyecta una secuencia de comandos en la página.

Configuración: Lista de patrones de URL

Obligatorio para: injectScript

Firma de la consulta: queryPermission('inject_script', <url>)

Notas: Determina si una plantilla personalizada puede insertar JavaScript y desde qué origen puede hacerlo.

Código de ejemplo

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

registro

Nombre visible: Registros a la consola

Descripción: Registra a la consola para desarrolladores y al modo de vista previa de GTM.

Configuración: Es una opción para habilitar el registro en producción. La configuración predeterminada es solo habilitar el registro en la depuración y la vista previa. Si se niega el permiso, logToConsole no arrojará un error, pero suprimirá el mensaje de registro.

Obligatorio para: logToConsole

Firma de la consulta: queryPermission('logging')

Notas: Controla si una plantilla personalizada puede registrarse en Play Console.

Código de ejemplo

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

Nombre visible: Lee la capa de datos.

Descripción: Lee datos de dataLayer.

Configuración: Es un conjunto de expresiones de coincidencia de claves, en las que una coincidencia de clave puede ser una serie inicial de referencias punteadas con un comodín final. Las expresiones de coincidencia de claves determinan qué propiedades se pueden leer de la capa de datos.

Obligatorio para: copyFromDataLayer

Firma de la consulta: queryPermission('read_data_layer', <data layer key to read from>)

Notas: Controla si una plantilla personalizada puede leer desde la capa de datos.

Código de ejemplo

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

Nombre visible: Lee el grupo de caracteres del documento.

Descripción: Lee document.characterSet.

Configuración: ninguna

Obligatorio para: readCharacterSet

Firma de la consulta: queryPermission('read_character_set')

Notas: Determina si una plantilla personalizada puede leer document.characterSet.

Código de ejemplo

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

read_container_data

Nombre visible: Lee datos del contenedor.

Descripción: Lee datos sobre el contenedor.

Configuración: ninguna

Obligatorio para: getContainerVersion

Firma de la consulta: queryPermission('read_container_data')

Notas: Controla si una plantilla personalizada puede leer datos sobre el contenedor.

Código de ejemplo

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

read_event_metadata

Nombre visible: Lee los metadatos del evento.

Descripción: Lee metadatos de eventos en devoluciones de llamada de eventos.

Configuración: ninguna

Obligatorio para: addEventCallback

Firma de la consulta: queryPermission('read_event_metadata')

Notas: Controla si una plantilla personalizada puede leer metadatos de eventos en devoluciones de llamada.

Código de ejemplo

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

read_title

Nombre visible: Lee el título del documento.

Descripción: Lee document.title.

Configuración: ninguna

Obligatorio para: readTitle

Firma de la consulta: queryPermission('read_title')

Notas: Determina si una plantilla personalizada puede leer el document.title.

Código de ejemplo

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

send_pixel

Nombre visible: Envía píxeles.

Descripción: Envía una solicitud GET a una URL especificada. No se procesa la respuesta.

Configuración: Lista de patrones de URL permitidos.

Obligatorio para: sendPixel

Firma de la consulta: queryPermission('send_pixel', <url>)

Notas: Determina si una plantilla personalizada puede enviar una solicitud GET y a qué origen puede hacerlo.

Código de ejemplo

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

Nombre visible: Establece una cookie.

Descripción: Configura una cookie con el nombre y los parámetros especificados.

Configuración: Una tabla de nombres de cookies permitidos, cada uno con restricciones opcionales sobre el nombre, el dominio, la ruta de acceso, el atributo secure y el vencimiento.

Obligatorio para: setCookie

Firma de la consulta: queryPermission('set_cookies', <name>, <options>)

Notas: Determina si una cookie se puede escribir según el nombre de la cookie, el dominio, la ruta de acceso, el atributo secure y el vencimiento.

Código de ejemplo

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

Nombre visible: Escribe la capa de datos.

Descripción: Escribe datos en dataLayer.

Configuración: Es un conjunto de expresiones de coincidencia de claves, en las que una coincidencia de clave puede ser una serie inicial de referencias punteadas con un comodín final. Las expresiones de coincidencia de claves determinan qué propiedades pueden escribir en la capa de datos.

Obligatorio para: gtagSet

Firma de la consulta: queryPermission('write_data_layer', <data layer key to write from>)

Notas: Controla si una plantilla personalizada puede escribir en la capa de datos.

Código de ejemplo

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