沙箱模式 JavaScript

沙箱模式 JavaScript 是 JavaScript 語言的簡化子集, 能讓您安全地從 Google 代碼執行任意 JavaScript 邏輯 自訂範本為了提供安全的執行環境,一些 JavaScript 的功能受到限製或移除。沙箱模式 JavaScript 是以 ECMAScript 5.1 的偵錯要求一些 ECMAScript 6 功能,例如箭頭函數和 有 const 項宣告可以使用 (共 let 項)。

全域執行環境

沙箱模式的 JavaScript 不會在標準全域執行作業中執行 例如一般 JavaScript 的環境,因此 window 物件及其屬性 無法使用。這包括全域範圍中定義的方法,例如 encodeURIsetTimeoutlocationdocument 等全域值,以及 由載入的指令碼定義的全域值而應使用全域 require 函式適用於所有沙箱 JavaScript ,提供 函式。您可以利用 copyFromWindow 公用程式。

簡化的輸入系統

沙箱模式 JavaScript 支援下列類型:nullundefinedstringnumberbooleanarrayobjectfunction。陣列和 物件是使用常值語法 ( [] {} ) 建立,而且不含任何 能存取標準全域執行環境、全域建構函式,例如 未提供「String()」和「Number()」。以下位置中沒有任何new關鍵字 採用沙箱機制的 JavaScript 和函式無法存取 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']);