JavaScript con sandbox

JavaScript con sandbox è un sottoinsieme semplificato del linguaggio JavaScript che fornisce un modo sicuro per eseguire una logica JavaScript arbitraria dai modelli personalizzati di Google Tag Manager. Per offrire un ambiente di esecuzione sicuro, alcune funzionalità di JavaScript sono limitate o rimosse. JavaScript con sandbox si basa su ECMAScript 5.1. Sono disponibili alcune funzionalità di ECMAScript 6, come le funzioni a freccia e le dichiarazioni const/let.

Ambiente di esecuzione globale

JavaScript con sandbox non viene eseguito nell'ambiente di esecuzione globale standard come il normale JavaScript, quindi l'oggetto window e le relative proprietà non sono disponibili. Ciò include 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 queste, è disponibile una funzione require globale per tutti i JavaScript con sandbox che forniscono molte di queste funzioni. I valori possono essere letti dalla finestra con l'utilità copyFromWindow.

Sistema di tipo semplificato

JavaScript con sandbox supporta i seguenti tipi: null, undefined, string, number, boolean, array, object e function. Le matrici e gli oggetti vengono creati utilizzando la sintassi letterale ([] {}) e, poiché non è disponibile l'accesso all'ambiente di esecuzione globale standard, i costruttori globali come String() e Number() non sono disponibili. Non è presente alcuna parola chiave new nel codice 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 elenco completo dei metodi di tipi nativi supportati.

Formato codice modello personalizzato

Il codice scritto per implementare un modello personalizzato rappresenta il corpo di una funzione che verrà eseguita ogni volta che il tag viene attivato o viene valutata la variabile. Questa funzione ha un singolo parametro dati (data) che contiene tutti i valori configurati nell'interfaccia utente per quel tag o istanza della variabile, con le chiavi impostate sui nomi dei parametri del modello 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']);