Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
JavaScript hộp cát là một tập hợp con ngôn ngữ JavaScript đơn giản
cung cấp một cách an toàn để thực thi logic JavaScript tuỳ ý từ Thẻ Google
Mẫu tuỳ chỉnh của người quản lý. Để cung cấp môi trường thực thi an toàn, một số
các tính năng của JavaScript bị hạn chế hoặc bị xoá. JavaScript hộp cát dựa trên
trên ECMAScript 5.1. Một số tính năng của ECMAScript 6 như hàm mũi tên và
Có const/let bản khai báo.
Môi trường thực thi chung
JavaScript hộp cát không được thực thi trong phương thức thực thi chung chuẩn
giống như JavaScript thông thường, vì vậy, đối tượng window và các thuộc tính của đối tượng đó
không có. Điều này bao gồm các phương thức được xác định trong phạm vi toàn cầu như
encodeURI hoặc setTimeout, các giá trị chung như location hoặc document, và
các giá trị chung được xác định bởi các tập lệnh đã tải. Thay vào đó, require toàn cục
có sẵn cho tất cả JavaScript dạng hộp cát cung cấp nhiều
. Bạn có thể đọc các giá trị từ cửa sổ này bằng
Tiện ích copyFromWindow.
Hệ thống kiểu được đơn giản hoá
JavaScript hộp cát hỗ trợ các loại sau: null, undefined,
string, number, boolean, array, object và function. Mảng và
các đối tượng được tạo bằng cú pháp cố định ( [] {} ) và vì không có
quyền truy cập vào môi trường thực thi toàn cục chuẩn, các hàm dựng toàn cục như
Không mua được String() và Number(). Không có từ khoá new nào trong
JavaScript hộp cát và các hàm không có quyền truy cập vào từ khoá this.
Một số phương thức kiểu gốc cũng đã bị xoá. Hãy xem thư viện chuẩn để biết
danh sách đầy đủ các phương thức kiểu gốc được hỗ trợ.
Định dạng mã mẫu tuỳ chỉnh
Mã được viết để triển khai mẫu tuỳ chỉnh đại diện cho phần nội dung của
sẽ được thực thi bất cứ khi nào thẻ của bạn được kích hoạt hoặc biến của bạn là
đánh giá. Hàm này có một tham số dữ liệu duy nhất (data) chứa tất cả
các giá trị được định cấu hình trong giao diện người dùng cho thẻ hoặc phiên bản biến đó, với các khoá được đặt
vào tên của thông số mẫu được chỉ định trong mẫu tùy chỉnh.
[null,null,["Cập nhật lần gần đây nhất: 2025-07-25 UTC."],[[["\u003cp\u003eSandboxed JavaScript in Google Tag Manager offers a secure environment to execute custom code with limited features for safety.\u003c/p\u003e\n"],["\u003cp\u003eIt utilizes a simplified type system and lacks access to the standard JavaScript global execution environment, relying on a \u003ccode\u003erequire\u003c/code\u003e function for functionalities like \u003ccode\u003eencodeURI\u003c/code\u003e or \u003ccode\u003esetTimeout\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eCustom template code acts as a function executed upon tag firing or variable evaluation, receiving configured data through a \u003ccode\u003edata\u003c/code\u003e parameter.\u003c/p\u003e\n"],["\u003cp\u003eThe provided sample demonstrates building a beacon tag using \u003ccode\u003erequire\u003c/code\u003e for functionalities and accessing configuration data via \u003ccode\u003edata\u003c/code\u003e.\u003c/p\u003e\n"]]],["Sandboxed JavaScript, used in Google Tag Manager's custom templates, provides a safe execution environment with restricted features. It uses a simplified type system and lacks the standard `window` object, instead relying on a `require` function for globals. It supports basic types and literal array/object creation. Template code represents a function body with a `data` parameter containing UI-configured values. Code example uses functions `sendPixel`, `encodeUri`, `encodeUriComponent` for building a URL and appending cache buster parameter, then send the pixel with `sendPixel`.\n"],null,["# Sandboxed JavaScript is a simplified subset of the JavaScript language that\nprovides a safe way to execute arbitrary JavaScript logic from Google Tag\nManager's custom templates. To provide a safe execution environment, some\nfeatures of JavaScript are restricted or removed. Sandboxed JavaScript is based\non ECMAScript 5.1. Some ECMAScript 6 features such as arrow functions and\n`const`/`let` declarations are available.\n\nGlobal execution environment\n----------------------------\n\nSandboxed JavaScript is not executed in the standard global execution\nenvironment like normal JavaScript, so the `window` object and its properties\nare not available. This includes methods defined in the global scope like\n`encodeURI` or `setTimeout`, global values like `location` or `document`, and\nglobal values defined by loaded scripts. In place of these, a global `require`\nfunction is available to all sandboxed JavaScript that provides many of these\nfunctions. Values can be read from the window with the\n[`copyFromWindow`](/tag-platform/tag-manager/templates/api#copyfromwindow) utility.\n| **Note:** `copyFromWindow` creates a deep copy of the values, and it can be an expensive operation to pass those values into and out of the sandbox.\n\nSimplified type system\n----------------------\n\nSandboxed JavaScript supports the following types: `null`, `undefined`,\n`string`, `number`, `boolean`, `array`, `object`, and `function`. Arrays and\nobjects are created using the literal syntax ( `[] {}` ), and because there's no\naccess to the standard global execution environment, global constructors like\n`String()` and `Number()` aren't available. There is no `new` keyword in\nsandboxed JavaScript, and functions do not have access to the `this` keyword.\nSome native type methods have also been removed. See [standard library](/tag-platform/tag-manager/templates/standard-library) for an\nexhaustive list of supported native type methods.\n\nCustom template code format\n---------------------------\n\nThe code written to implement a custom template represents the body of a\nfunction that will be executed whenever your tag is fired or your variable is\nevaluated. This function has a single data parameter (`data`) that holds all the\nvalues configured in the UI for that tag or variable instance, with the keys set\nto the names of the template parameters specified in the custom template.\n\nSample beacon tag implementation\n--------------------------------\n\n const sendPixel = require('sendPixel');\n const encodeUri = require('encodeUri');\n const encodeUriComponent = require('encodeUriComponent');\n\n let url = encodeUri(data['url']);\n\n if (data['useCacheBuster']) {\n const encode = require('encodeUriComponent');\n const cacheBusterQueryParam = data['cacheBusterQueryParam'] || 'gtmcb';\n const last = url.charAt(url.length - 1);\n let delimiter = '&';\n if (url.indexOf('?') \u003c 0) {\n delimiter = '?';\n } else if (last == '?' || last == '&') {\n delimiter = '';\n }\n url += delimiter +\n encodeUriComponent(cacheBusterQueryParam) + '=' + encodeUriComponent(data['randomNumber']);\n }\n sendPixel(url, data['gtmOnSuccess'], data['gtmOnFailure']);"]]