Изолированный 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']);