Песочница JavaScript

Песочница JavaScript – это упрощенное подмножество языка JavaScript, которое обеспечивает безопасный способ выполнения произвольной логики JavaScript из пользовательских шаблонов Диспетчера тегов Google. Чтобы обеспечить безопасную среду выполнения, некоторые функции JavaScript ограничены или удалены. Песочница JavaScript основана на ECMAScript 5.1. Доступны некоторые функции ECMAScript 6, такие как стрелочные функции и объявления const / let .

Глобальная среда выполнения

Песочница JavaScript не выполняется в стандартной глобальной среде выполнения, как обычный JavaScript, поэтому объект window и его свойства недоступны. Сюда входят методы, определенные в глобальной области, такие как encodeURI или setTimeout , глобальные значения, такие как location или document , и глобальные значения, определенные загруженными скриптами. Вместо них глобальная функция require доступна для всего изолированного JavaScript, который предоставляет многие из этих функций. Значения можно прочитать из окна с помощью утилиты copyFromWindow .

Упрощенная система типов

Песочница JavaScript поддерживает следующие типы: null , undefined , string , number , boolean , array , object и function . Массивы и объекты создаются с использованием литерального синтаксиса ( [] {} ), и поскольку нет доступа к стандартной глобальной среде выполнения, глобальные конструкторы, такие как String() и Number() , недоступны. В изолированном JavaScript нет new ключевого слова, и функции не имеют доступа к this ключевому слову. Некоторые собственные методы типа также были удалены. См. в стандартной библиотеке исчерпывающий список поддерживаемых методов собственного типа.

Пользовательский формат кода шаблона

Код, написанный для реализации пользовательского шаблона, представляет собой тело функции, которая будет выполняться всякий раз, когда активируется ваш тег или оценивается ваша переменная. Эта функция имеет один параметр данных ( data ), который содержит все значения, настроенные в пользовательском интерфейсе для этого тега или экземпляра переменной, с ключами, установленными на имена параметров шаблона, указанные в пользовательском шаблоне.

Пример реализации тега маяка

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