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