JavaScript ที่แซนด์บ็อกซ์คือชุดย่อยของภาษา JavaScript ที่เรียบง่ายซึ่งให้วิธีในการเรียกใช้ตรรกะ JavaScript ที่กําหนดเองจากเทมเพลตที่กําหนดเองของ Google Tag Manager ระบบจะจํากัดหรือนําฟีเจอร์ของ 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()
จะไม่พร้อมใช้งาน ไม่มีคีย์เวิร์ด new
ใน JavaScript ที่แซนด์บ็อกซ์ และฟังก์ชันไม่มีสิทธิ์เข้าถึงคีย์เวิร์ด this
นอกจากนี้ระบบได้นําประเภทโฆษณาเนทีฟบางรายการออกด้วย โปรดดูไลบรารีมาตรฐานสําหรับรายการเมธอดประเภทเนทีฟที่รองรับโดยละเอียด
รูปแบบโค้ดเทมเพลตที่กําหนดเอง
โค้ดที่เขียนขึ้นเพื่อใช้เทมเพลตที่กําหนดเองแสดงถึงเนื้อความของฟังก์ชันที่จะใช้งานเมื่อแท็กเริ่มทํางานหรือเมื่อตัวแปรได้รับการประเมิน ฟังก์ชันนี้มีพารามิเตอร์ข้อมูลเดียว (data
) ที่จัดเก็บค่าทั้งหมดใน UI สําหรับแท็กหรืออินสแตนซ์ตัวแปรนั้นๆ โดยมีคีย์ที่ตั้งค่าเป็นชื่อของพารามิเตอร์เทมเพลตที่ระบุในเทมเพลตที่กําหนดเอง
ตัวอย่างการติดตั้งใช้งานแท็กบีคอน
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']);