沙箱式 JavaScript 是 JavaScript 語言的簡化版,可讓您透過安全的方式從 Google 代碼管理工具的自訂範本執行任意 JavaScript 邏輯。為了提供安全的執行環境,系統會停用或移除某些 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']);