JavaScript in Sandbox

In einer Sandbox ausgeführtes JavaScript ist eine vereinfachte Teilmenge der JavaScript-Sprache, die eine sichere Möglichkeit bietet, beliebige JavaScript-Logik über die benutzerdefinierten Vorlagen von Google Tag Manager auszuführen. Für eine sichere Ausführungsumgebung werden einige Features von JavaScript eingeschränkt oder entfernt. In einer Sandbox ausgeführtes JavaScript basiert auf ECMAScript 5.1. Einige ECMAScript 6-Funktionen wie Pfeilfunktionen und const/let-Deklarationen sind verfügbar.

Globale Ausführungsumgebung

In der Sandbox ausgeführtes JavaScript wird nicht in der standardmäßigen globalen Ausführungsumgebung wie normales JavaScript ausgeführt. Das window-Objekt und seine Attribute sind daher nicht verfügbar. Dazu gehören im globalen Bereich definierte Methoden wie encodeURI oder setTimeout, globale Werte wie location oder document sowie globale Werte, die durch geladene Skripts definiert werden. Anstelle dieser ist eine globale require-Funktion für das gesamte Sandbox-JavaScript verfügbar, das viele dieser Funktionen bietet. Mit dem Dienstprogramm copyFromWindow können Werte aus dem Fenster gelesen werden.

Vereinfachtes Typsystem

In einer Sandbox ausgeführtes JavaScript unterstützt die folgenden Typen: null, undefined, string, number, boolean, array, object und function. Arrays und Objekte werden mit der Literalsyntax ( [] {}) erstellt. Da es keinen Zugriff auf die standardmäßige globale Ausführungsumgebung gibt, sind globale Konstruktoren wie String() und Number() nicht verfügbar. Im Sandbox-JavaScript-Code gibt es kein new-Keyword und Funktionen haben keinen Zugriff auf das this-Keyword. Einige native Methoden wurden ebenfalls entfernt. Eine vollständige Liste der unterstützten Methoden für native Typen finden Sie in der Standardbibliothek.

Format des benutzerdefinierten Vorlagencodes

Der Code zum Implementieren einer benutzerdefinierten Vorlage stellt den Hauptteil einer Funktion dar, die ausgeführt wird, wenn Ihr Tag ausgelöst oder Ihre Variable ausgewertet wird. Diese Funktion hat einen einzelnen Datenparameter (data), der alle in der UI konfigurierten Werte für dieses Tag oder diese Variableninstanz enthält, wobei die Schlüssel auf die Namen der Vorlagenparameter festgelegt sind, die in der benutzerdefinierten Vorlage angegeben sind.

Beacon-Tag-Implementierung (Beispiel)

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