جاوا اسکریپت Sandboxed یک زیرمجموعه ساده شده از زبان جاوا اسکریپت است که راهی امن برای اجرای منطق دلخواه جاوا اسکریپت از قالب های سفارشی Google Tag Manager ارائه می دهد. برای ارائه یک محیط اجرای ایمن، برخی از ویژگی های جاوا اسکریپت محدود یا حذف می شوند. جاوا اسکریپت Sandboxed بر اساس ECMAScript 5.1 است. برخی از ویژگیهای ECMAScript 6 مانند توابع پیکان و اعلانهای const
/ let
در دسترس هستند.
محیط اجرای جهانی
جاوا اسکریپت Sandboxed در محیط استاندارد اجرای جهانی مانند جاوا اسکریپت معمولی اجرا نمی شود، بنابراین شی window
و ویژگی های آن در دسترس نیستند. این شامل روشهای تعریفشده در حوزه جهانی مانند encodeURI
یا setTimeout
، مقادیر کلی مانند location
یا document
، و مقادیر کلی تعریفشده توسط اسکریپتهای بارگذاریشده است. به جای اینها، یک تابع require
جهانی برای همه جاوا اسکریپت جعبه شنی در دسترس است که بسیاری از این توابع را فراهم می کند. مقادیر را می توان از پنجره با ابزار copyFromWindow
خواند.
سیستم نوع ساده شده
جاوا اسکریپت Sandboxed انواع زیر را پشتیبانی می کند: null
، undefined
، string
، number
، boolean
، array
، object
و function
. آرایه ها و اشیاء با استفاده از نحو تحت اللفظی ( [] {}
) ایجاد می شوند و چون دسترسی به محیط استاندارد اجرای جهانی وجود ندارد، سازنده های جهانی مانند String()
و Number()
در دسترس نیستند. هیچ کلمه کلیدی new
در جاوا اسکریپت سندباکس وجود ندارد و توابع به this
کلمه کلیدی دسترسی ندارند. برخی از روش های نوع بومی نیز حذف شده اند. برای فهرست جامعی از روشهای نوع بومی پشتیبانیشده به کتابخانه استاندارد مراجعه کنید.
قالب کد قالب سفارشی
کد نوشته شده برای پیاده سازی یک الگوی سفارشی، بدنه یک تابع را نشان می دهد که هر زمان که تگ شما فعال شود یا متغیر شما ارزیابی شود، اجرا می شود. این تابع دارای یک پارامتر داده واحد ( data
) است که تمام مقادیر پیکربندی شده در UI برای آن تگ یا نمونه متغیر را با کلیدهایی که روی نام پارامترهای قالب مشخص شده در الگوی سفارشی تنظیم شده اند، نگه می دارد.
نمونه اجرای تگ 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']);