JavaScript con sandbox è un sottoinsieme semplificato del linguaggio JavaScript che
fornisce un modo sicuro per eseguire una logica JavaScript arbitraria dal tag Google
i modelli personalizzati di Manager. Per offrire un ambiente di esecuzione sicuro,
funzioni di JavaScript vengono limitate o rimosse. JavaScript con sandbox si basa
su ECMAScript 5.1. Alcune funzionalità di ECMAScript 6, come le funzioni freccia e
Sono disponibili const
/let
dichiarazioni.
Ambiente di esecuzione globale
JavaScript con sandbox non viene eseguito nell'esecuzione globale standard
come il normale JavaScript, quindi l'oggetto window
e le sue proprietà
non sono disponibili. Sono inclusi i metodi definiti nell'ambito globale, come
encodeURI
o setTimeout
, valori globali come location
o document
e
valori globali definiti dagli script caricati. Al posto di questi, un require
globale
è disponibile per tutto il codice JavaScript con sandbox che fornisce molti di questi
funzioni. I valori possono essere letti dalla finestra
copyFromWindow
.
Sistema di digitazione semplificato
JavaScript con sandbox supporta i seguenti tipi: null
, undefined
,
string
, number
, boolean
, array
, object
e function
. Array e
vengono creati utilizzando la sintassi letterale ( [] {}
) e poiché non sono presenti
all'ambiente di esecuzione globale standard, costruttori globali come
String()
e Number()
non sono disponibili. Nessuna parola chiave new
in
JavaScript con sandbox e le funzioni non hanno accesso alla parola chiave this
.
Sono stati rimossi anche alcuni metodi di tipo nativo. Consulta la libreria standard per un
un elenco esaustivo dei metodi di tipi nativi supportati.
Formato codice modello personalizzato
Il codice scritto per implementare un modello personalizzato rappresenta il corpo di un
funzione che verrà eseguita ogni volta che il tag viene attivato o la variabile viene
viene valutato. Questa funzione ha un singolo parametro dei dati (data
) che contiene tutte le
i valori configurati nell'interfaccia utente per l'istanza di tag o variabile in questione, con le chiavi impostate
ai nomi dei parametri specificati nel modello personalizzato.
Esempio di implementazione del tag beacon
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']);