En este documento, se describen los permisos para las plantillas personalizadas de la Web.
Cada permiso tiene las siguientes características:
- Las APIs que las requieren las verifican.
- Se detecta automáticamente en JavaScript en zona de pruebas, según las APIs que se usan. Esto sucede cuando se realizan ediciones en el editor de plantillas personalizadas (para un ciclo de retroalimentación 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 en zona de pruebas a través de la API de
queryPermission
.
access_globals
Nombre visible: Accede a variables globales
Descripción: Permite el acceso a una variable global (que podría incluir APIs sensibles).
Configuración: Es una lista de las claves a las que se puede acceder. Cada clave es una ruta de acceso separada por puntos. Por ejemplo: foo.bar
El primer token de cada ruta 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.
Requerido por: setInWindow
, copyFromWindow
, callInWindow
,
createQueue
, createArgumentsQueue
Firma de la búsqueda: queryPermission('access_globals', 'read', <key to read
from>)
o queryPermission('access_globals', 'write', <key to write to>)
o 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 valores globales.
Ejemplo de código
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: Es una lista de las claves de almacenamiento local a las que se puede acceder. Es un array simple de claves, sin comodines. Tiene casillas de verificación de lectura y escritura que rigen el acceso.
Requerido por: localStorage
Firma de la búsqueda: 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>)
Ejemplo de código
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 las plantillas que pueden persistir durante la vida útil de la página.
Configuración: Ninguna
Requerido por: templateStorage
Firma de la consulta: queryPermission('access_template_storage')
Ejemplo de código
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: Es una lista de los nombres de las cookies que se pueden leer.
Requerido por: getCookieValues
Firma de la consulta: queryPermission('get_cookies', <name>)
Notas: Rige si se puede leer una cookie, según su nombre.
Ejemplo de código
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 porciones reducidas de la URL de referencia.
Configuración: Los siguientes valores booleanos rigen 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 especificar un componente para obtener la URL de referencia completa si todos estos valores booleanos están establecidos en true
. Si no se establece ningún valor, el valor predeterminado es all
. Si se establece un valor, este debe ser un array de componentes, en el que cada componente es 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 que puede leer. Es un array simple de claves, sin comodines.
Obligatorio para: getReferrerUrl
, getReferrerQueryParameters
Firma de la consulta: queryPermission('get_referrer', <url_component>)
Ejemplo de código
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: Devuelve una parte o la totalidad de la URL de la página actual.
Configuración: Los siguientes valores booleanos rigen 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 especificar un componente para obtener la URL completa solo si todos estos valores booleanos están establecidos en true
. Si no se establece ningún valor, el valor predeterminado es all
. Si se establece un valor, este debe ser un array de componentes, en el que cada componente es 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 que puede leer. Es un array simple de claves, sin comodines.
Requerido por: getUrl
Firma de la consulta: queryPermission('get_url', <optional url component>,
<optional query key>)
Si se proporciona, el componente URL debe ser uno de los siguientes: 'protocol'
, 'host'
, 'port'
, 'path'
, 'query'
, 'extension'
o 'fragment'
. Si se omite, la consulta de permiso es una solicitud de acceso a toda la URL.
Si se proporciona, la clave de consulta debe ser el argumento de cadena de consulta que el código de la plantilla desea leer.
Notas: Controla si una plantilla personalizada puede leer la ubicación actual. Permite limitar la búsqueda a una parte específica de la ubicación.
Ejemplo de código
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: Inserta iframes ocultos
Descripción: Inserta un iframe invisible con una URL determinada.
Configuración: Lista de patrones de URL
Requerido por: injectHiddenIframe
Firma de la consulta: queryPermission('inject_hidden_iframe', <url>)
Notas: Rige si una plantilla personalizada puede insertar un iframe invisible y desde qué origen puede hacerlo.
Ejemplo de código
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: Inserta una secuencia de comandos en la página.
Configuración: Lista de patrones de URL
Requerido por: injectScript
Firma de la consulta: queryPermission('inject_script', <url>)
Notas: Rige si una plantilla personalizada puede insertar JavaScript y desde qué origen puede hacerlo.
Ejemplo de código
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: Registra datos en la consola
Descripción: Registros en la consola para desarrolladores y el modo de vista previa de GTM.
Configuración: Opción para habilitar el registro en producción. De forma predeterminada, solo se habilita el registro en la depuración o la vista previa. Si se deniega el permiso, logToConsole
no arrojará un error, sino que suprimirá el mensaje de registro.
Requerido por: logToConsole
Firma de la consulta: queryPermission('logging')
Notas: Controla si una plantilla personalizada puede registrarse en la consola para desarrolladores.
Ejemplo de código
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 la capa de datos.
Configuración: Es un conjunto de expresiones de coincidencia de claves, en el que una coincidencia de clave puede ser una serie inicial de referencias con puntos, con un comodín final. Las expresiones de coincidencia de claves rigen qué propiedades se pueden leer de la capa de datos.
Requerido por: copyFromDataLayer
Firma de la consulta: queryPermission('read_data_layer', <data layer key to read
from>)
Notas: Controla si una plantilla personalizada puede leer la capa de datos.
Ejemplo de código
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
Nombre visible: Lee el almacenamiento de Analytics
Descripción: Esto permite que las plantillas lean los datos de análisis almacenados, como los IDs de cliente.
Configuración: Ninguna
Requerido por: readAnalyticsStorage
Firma de la consulta: queryPermission('read_analytics_storage')
Notas: Rige si una plantilla personalizada puede leer datos del almacenamiento de Analytics.
Ejemplo de código
const queryPermission = require('queryPermission');
const readAnalyticsStorage = require('readAnalyticsStorage');
if (queryPermission('read_analytics_storage')) {
const value = readAnalyticsStorage();
}
read_character_set
Nombre visible: Lee el grupo de caracteres del documento
Descripción: Lee document.characterSet
.
Configuración: Ninguna
Requerido por: readCharacterSet
Firma de la consulta: queryPermission('read_character_set')
Notas: Rige si una plantilla personalizada puede leer document.characterSet
.
Ejemplo de código
const queryPermission = require('queryPermission');
const readCharacterSet = require('readCharacterSet');
if (queryPermission('read_character_set')) {
const characterSet = readCharacterSet();
}
read_container_data
Nombre visible: Lee datos de contenedores
Descripción: Lee datos sobre el contenedor.
Configuración: Ninguna
Requerido por: getContainerVersion
Firma de la consulta: queryPermission('read_container_data')
Notas: Controla si una plantilla personalizada puede leer datos sobre el contenedor.
Ejemplo de código
const queryPermission = require('queryPermission');
const getCookieValues = require('getContainerVersion');
let version;
if (queryPermission('read_container_data')) {
version = getContainerVersion();
}
read_event_metadata
Nombre visible: Lee metadatos de eventos
Descripción: Lee los metadatos del evento en las devoluciones de llamada del evento
Configuración: Ninguna
Requerido por: addEventCallback
Firma de la consulta: queryPermission('read_event_metadata')
Notas: Controla si una plantilla personalizada puede leer los metadatos del evento en las devoluciones de llamada.
Ejemplo de código
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
Requerido por: readTitle
Firma de la consulta: queryPermission('read_title')
Notas: Rige si una plantilla personalizada puede leer el objeto document.title
.
Ejemplo de código
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 procesó la respuesta.
Configuración: Lista de patrones de URL permitidos.
Requerido por: sendPixel
Firma de la consulta: queryPermission('send_pixel', <url>)
Notas: Rige si una plantilla personalizada puede enviar una solicitud GET y a qué origen puede hacerlo.
Ejemplo de código
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: Establece una cookie con el nombre y los parámetros especificados.
Configuración: Es 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.
Requerido por: setCookie
Firma de la consulta: queryPermission('set_cookies', <name>, <options>)
Notas: Rige si se puede escribir una cookie, según el nombre, el dominio, la ruta, el atributo secure
y el vencimiento de la cookie.
Ejemplo de código
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 en la capa de datos
Descripción: Escribe datos en la capa de datos.
Configuración: Es un conjunto de expresiones de coincidencia de claves, en el que una coincidencia de clave puede ser una serie inicial de referencias con puntos, con un comodín final. Las expresiones de coincidencia de claves rigen qué propiedades pueden escribir en la capa de datos.
Requerido por: 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.
Ejemplo de código
const queryPermission = require('queryPermission');
const gtagSet = require('gtagSet');
const dlKey = 'foo.bar';
if (queryPermission('write_data_layer', dlKey)) {
gtagSet({dlKey: 'baz'});
}