JavaScript w trybie piaskownicy

JavaScript w trybie piaskownicy to uproszczony podzbiór języka JavaScript, który zapewnia bezpieczny sposób wykonywania dowolnej logiki JavaScriptu z poziomu tagu Google Szablony niestandardowe menedżera. Aby zapewnić bezpieczne środowisko wykonawcze, niektóre funkcje języka JavaScript zostały ograniczone lub usunięte. JavaScript w trybie piaskownicy działa w środowisku ECMAScript 5.1. niektóre funkcje ECMAScript 6, takie jak funkcje strzałek i Dostępne deklaracje: const/let.

Globalne środowisko wykonawcze

JavaScript w trybie piaskownicy nie jest wykonywany w standardowym wykonaniu globalnym jak zwykły JavaScript, więc obiekt window i jego właściwości są niedostępne. Obejmuje to metody zdefiniowane w zakresie globalnym, takie jak encodeURI lub setTimeout, wartości globalne, np. location lub document, oraz globalne wartości zdefiniowane przez wczytane skrypty. W ich miejscu znajduje się globalny require jest dostępna dla wszystkich JavaScriptu w trybie piaskownicy, które zawierają wiele z tych funkcji funkcji. Wartości można odczytać z okna za pomocą copyFromWindow.

Uproszczony system typów

JavaScript w trybie piaskownicy obsługuje te typy: null, undefined, string, number, boolean, array, object i function. Tablice oraz obiekty są tworzone przy użyciu składni literału ( [] {}), a ponieważ w funkcji do standardowego globalnego środowiska wykonawczego, takich jak globalne konstruktory, Opcje String() i Number() są niedostępne. Brak słowa kluczowego „new” w: JavaScript w piaskownicy, więc funkcje nie mają dostępu do słowa kluczowego this. Niektóre metody korzystania z typów natywnych również zostały usunięte. Znajdź bibliotekę standardową wyczerpującą listę obsługiwanych metod natywnych.

Niestandardowy format kodu szablonu

Kod napisany w celu implementacji szablonu niestandardowego reprezentuje treść , która będzie wykonywana przy każdym wywołaniu tagu, lub zmienna oceniono. Ta funkcja ma pojedynczy parametr danych (data), który zawiera wszystkie wartości skonfigurowane w interfejsie dla danego tagu lub wystąpienia zmiennej z ustawionymi kluczami; do nazw parametrów szablonu określonych w szablonie niestandardowym.

Przykładowa implementacja tagu typu beacon

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