Korumalı Alana Sahip JavaScript

Korumalı alana sahip JavaScript, Google Etiket Yöneticisi'nin özel şablonlarından rastgele JavaScript mantığı yürütmenin güvenli bir yolunu sağlayan JavaScript dilinin basitleştirilmiş bir alt kümesidir. Güvenli bir yürütme ortamı sağlamak için JavaScript'in bazı özellikleri kısıtlanır veya kaldırılır. Korumalı alana sahip JavaScript, ECMAScript 5.1'e dayanır. Ok işlevleri ve const/let bildirimleri gibi bazı ECMAScript 6 özellikleri kullanılabilir.

Genel yürütme ortamı

Korumalı alana sahip JavaScript, normal JavaScript gibi standart global yürütme ortamında yürütülmez. Bu nedenle window nesnesi ve özellikleri kullanılamaz. Buna encodeURI veya setTimeout gibi genel kapsamda tanımlanan yöntemler, location veya document gibi genel değerler ve yüklenen komut dosyaları tarafından tanımlanan genel değerler dahildir. Bunun yerine, bu işlevlerin çoğunu sağlayan korumalı alana sahip tüm JavaScript'lerde genel bir require işlevi kullanılabilir. Değerler copyFromWindow yardımcı programı kullanılarak pencereden okunabilir.

Basitleştirilmiş tür sistemi

Korumalı alana sahip JavaScript şu türleri destekler: null, undefined, string, number, boolean, array, object ve function. Diziler ve nesneler, hazır söz dizimi ( [] {}) kullanılarak oluşturulur ve standart küresel yürütme ortamına erişim olmadığından String() ve Number() gibi global oluşturucular kullanılamaz. Korumalı alana alınmış JavaScript'te new anahtar kelimesi yok ve işlevler this anahtar kelimesine erişemiyor. Bazı yerel tür yöntemleri de kaldırıldı. Desteklenen yerel tür yöntemlerin kapsamlı bir listesi için standart kitaplığa bakın.

Özel şablon kodu biçimi

Özel şablon uygulamak için yazılan kod, etiketiniz tetiklendiğinde veya değişkeniniz değerlendirildiğinde yürütülecek işlevin gövdesini temsil eder. Bu işlevde, söz konusu etiket veya değişken örneği için kullanıcı arayüzünde yapılandırılan tüm değerleri barındıran tek bir veri parametresi (data) vardır. Bu parametre, özel şablonda belirtilen şablon parametrelerinin adları için anahtarlarla ayarlanmıştır.

Örnek işaretçi etiketi uygulaması

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