Sandboxed JavaScript es un subconjunto simplificado del lenguaje JavaScript que proporciona una forma segura de ejecutar la lógica de JavaScript arbitraria desde las plantillas personalizadas de Google Tag Manager. Para proporcionar un entorno de ejecución seguro, algunas funciones de JavaScript están restringidas o eliminadas. JavaScript en espacio aislado se basa en ECMAScript 5.1. Algunas funciones de ECMAScript 6, como las funciones de flecha y las declaraciones const
/ let
, están disponibles.
Entorno de ejecución global
El JavaScript en espacio aislado no se ejecuta en el entorno de ejecución global estándar como el JavaScript normal, por lo que el objeto window
y sus propiedades no están disponibles. Esto incluye métodos definidos en el ámbito global como encodeURI
o setTimeout
, valores globales como location
o document
y valores globales definidos por scripts cargados. En lugar de estos, una función require
global está disponible para todo JavaScript en espacio aislado que proporciona muchas de estas funciones. Los valores se pueden leer desde la ventana con la utilidad copyFromWindow
.
Sistema de tipo simplificado
JavaScript en espacio aislado admite los siguientes tipos: null
, undefined
, string
, number
, boolean
, array
, object
y function
. Las matrices y los objetos se crean utilizando la sintaxis literal ( [] {}
), y debido a que no hay acceso al entorno de ejecución global estándar, los constructores globales como String()
y Number()
no están disponibles. No hay una palabra clave new
en JavaScript en espacio aislado y las funciones no tienen acceso a this
palabra clave. También se han eliminado algunos métodos de tipo nativo. Consulte la biblioteca estándar para obtener una lista exhaustiva de los métodos de tipo nativo admitidos.
Formato de código de plantilla personalizado
El código escrito para implementar una plantilla personalizada representa el cuerpo de una función que se ejecutará cada vez que se active su etiqueta o se evalúe su variable. Esta función tiene un único parámetro de datos ( data
) que contiene todos los valores configurados en la interfaz de usuario para esa etiqueta o instancia de variable, con las claves configuradas con los nombres de los parámetros de plantilla especificados en la plantilla personalizada.
Implementación de etiqueta de baliza de muestra
const sendPixel = require('sendPixel');
const encodeUri = require('encodeUri');
const encodeUriComponent = require('encodeUriComponent');
let url = encodeUri(data['url']);
if (data['useCacheBuster']) {
const encode = require('encodeUriComponent');
const cacheBusterQueryParam = data['cacheBusterQueryParam'] || 'gtmcb';
const last = url.charAt(url.length - 1);
let delimiter = '&';
if (url.indexOf('?') < 0) {
delimiter = '?';
} else if (last == '?' || last == '&') {
delimiter = '';
}
url += delimiter +
encodeUriComponent(cacheBusterQueryParam) + '=' + encodeUriComponent(data['randomNumber']);
}
sendPixel(url, data['gtmOnSuccess'], data['gtmOnFailure']);