Code JavaScript de bac à sable

Le code JavaScript de bac à sable est un sous-ensemble simplifié du langage JavaScript qui offre un moyen sûr d'exécuter une logique JavaScript arbitraire à partir de la balise Google Modèles personnalisés du gestionnaire. Pour fournir un environnement d'exécution sécurisé, sont limitées ou supprimées. Le code JavaScript de bac à sable est basé sur ECMAScript 5.1. Certaines fonctionnalités d'ECMAScript 6, comme les fonctions fléchées const déclarations sur let sont disponibles.

Environnement d'exécution global

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

Système de types simplifié

Le code JavaScript de bac à sable est compatible avec les types suivants: null, undefined, string, number, boolean, array, object et function. Tableaux et sont créés à l'aide de la syntaxe littérale ( [] {}) et, comme il n'existe pas un accès à l'environnement d'exécution global standard, aux constructeurs globaux tels que String() et Number() ne sont pas disponibles. Aucun mot clé new dans le code JavaScript mis en bac à sable et les fonctions n'ont pas accès au mot clé this. Certaines méthodes de types natifs ont également été supprimées. Consultez la bibliothèque standard pour obtenir liste exhaustive des méthodes de types natifs compatibles.

Format du code du modèle personnalisé

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

Exemple d'implémentation d'un tag 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']);