JavaScript בארגז חול

JavaScript עם ארגז חול הוא קבוצת משנה פשוטה של שפת JavaScript מספקת דרך בטוחה להפעיל לוגיקת JavaScript שרירותית מ-Google Tag תבניות בהתאמה אישית של מנהל. כדי לספק סביבת הפעלה בטוחה, יש מספר תכונות של JavaScript מוגבלות או הוסרו. JavaScript ב-Sandbox מבוסס ב-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() לא זמינים. אין מילת מפתח אחת (new) ב- JavaScript שבארגז חול (sandbox), ולפונקציות אין גישה למילת המפתח 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']);