Code JavaScript de bac à sable

Le code JavaScript de bac à sable est un sous-ensemble simplifié du langage JavaScript. Il s'agit d'un moyen sûr d'exécuter une logique JavaScript arbitraire à partir de modèles personnalisés Google Tag Manager. Pour garantir un environnement d'exécution sécurisé, certaines fonctionnalités de JavaScript sont limitées ou supprimées. Le code JavaScript de bac à sable est basé sur ECMAScript 5.1. Certaines fonctionnalités ECMAScript 6, telles que les fonctions fléchées et les déclarations const/let, sont disponibles.

Environnement d'exécution global

Le code JavaScript de bac à sable n'est pas exécuté dans l'environnement d'exécution global standard, comme c'est le cas pour le code JavaScript normal. L'objet window et ses propriétés ne sont donc pas disponibles. Cela inclut les méthodes définies dans le champ d'application global comme encodeURI ou setTimeout, les valeurs globales comme location ou document et les valeurs globales définies par des scripts chargés. À la place, une fonction require globale est disponible pour tous les scripts JavaScript de bac à sable qui fournissent un grand nombre de ces fonctions. Les valeurs peuvent être lues à partir de la fenêtre avec l'utilitaire copyFromWindow.

Système de types simplifié

Le code JavaScript de bac à sable accepte les types suivants : null, undefined, string, number, boolean, array, object et function. Les tableaux et les objets sont créés à l'aide de la syntaxe littérale ( [] {}). Comme il n'y a pas d'accès à l'environnement d'exécution global standard, les constructeurs globaux tels que String() et Number() ne sont pas disponibles. Il n'y a pas de mot clé new en JavaScript de bac à sable, et les fonctions n'ont pas accès au mot clé this. Certaines méthodes de type natif ont également été supprimées. Consultez la bibliothèque standard pour obtenir une liste exhaustive des méthodes de type natif compatibles.

Format de code du modèle personnalisé

Le code écrit pour implémenter un modèle personnalisé représente le corps d'une fonction qui sera exécutée chaque fois que votre balise est déclenchée ou que votre variable est évaluée. Cette fonction possède un seul paramètre de données (data) contenant toutes les valeurs configurées dans l'interface utilisateur de cette balise ou instance de variable, avec des clés définies sur les noms des paramètres de modèle spécifiés dans le modèle personnalisé.

Exemple d'implémentation de balise de balise

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']);