JavaScript in Sandbox

Sandboxed JavaScript ist eine vereinfachte Teilmenge der JavaScript-Sprache, bietet eine sichere Möglichkeit, beliebige JavaScript-Logik aus dem Google-Tag auszuführen Benutzerdefinierte Vorlagen des Managers. Um eine sichere Ausführungsumgebung bereitzustellen, Funktionen von JavaScript eingeschränkt oder entfernt wurden. Sandboxed JavaScript basiert auf ECMAScript 5.1. Einige ECMAScript 6-Funktionen wie Pfeilfunktionen und const/let Deklarationen sind verfügbar.

Globale Ausführungsumgebung

In einer Sandbox ausgeführtes JavaScript wird nicht in der globalen Standardausführung ausgeführt wie normales JavaScript verwenden, sodass das window-Objekt und seine Eigenschaften sind nicht verfügbar. Dazu gehören Methoden, die global definiert sind, wie encodeURI oder setTimeout, globale Werte wie location oder document und globale Werte, die durch geladene Skripts definiert wurden. Anstelle davon wird ein globaler require steht allen JavaScript-Code in einer Sandbox zur Verfügung, der viele dieser Funktionen bietet. Funktionen. Werte können aus dem Fenster mit der copyFromWindow-Dienstprogramm.

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 literalen Syntax ( [] {}) erstellt. Da es keine Zugriff auf die globale Standardausführungsumgebung, globale Konstruktoren wie String() und Number() sind nicht verfügbar. Kein new-Keyword vorhanden JavaScript in einer Sandbox und Funktionen haben keinen Zugriff auf das Schlüsselwort this. Einige Methoden für native Typen wurden ebenfalls entfernt. Weitere Informationen finden Sie in der Standardbibliothek. umfassende Liste der unterstützten Methoden für native Typen.

Format des benutzerdefinierten Vorlagencodes

Der Code, der zur Implementierung einer benutzerdefinierten Vorlage geschrieben wurde, stellt den Textkörper eines -Funktion, die immer dann ausgeführt wird, wenn Ihr Tag ausgelöst wird oder Ihre Variable bewertet. Diese Funktion hat einen einzelnen Datenparameter (data), der alle Werte, die in der Benutzeroberfläche für dieses Tag oder diese Variableninstanz konfiguriert wurden, wobei die Schlüssel festgelegt sind zu den Namen der Vorlagenparameter hinzu, die in der benutzerdefinierten Vorlage angegeben sind.

Beispiel für die Implementierung eines Beacon-Tags

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