Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Le code JavaScript de bac à sable est un sous-ensemble simplifié du langage JavaScript qui
offre un moyen sûr d'exécuter une logique JavaScript arbitraire à partir de la balise Google
Modèles personnalisés du gestionnaire. Pour fournir un environnement d'exécution sécurisé,
sont limitées ou supprimées. Le code JavaScript de bac à sable est basé
sur ECMAScript 5.1. Certaines fonctionnalités d'ECMAScript 6, comme les fonctions fléchées
const déclarations sur let sont disponibles.
Environnement d'exécution global
Le code JavaScript de bac à sable n'est pas exécuté lors de l'exécution globale standard
comme le code JavaScript normal. Ainsi, l'objet window et ses propriétés
ne sont pas disponibles. Cela inclut les méthodes définies dans le champ d'application global, telles que
encodeURI ou setTimeout, des valeurs globales comme location ou document, et
les valeurs globales définies par les scripts chargés. À la place, un require mondial
est disponible pour tous les scripts JavaScript de bac à sable qui fournissent un grand nombre de ces
fonctions. Les valeurs peuvent être lues dans la fenêtre à l'aide de la propriété
copyFromWindow.
Système de types simplifié
Le code JavaScript de bac à sable est compatible avec les types suivants: null, undefined,
string, number, boolean, array, object et function. Tableaux et
sont créés à l'aide de la syntaxe littérale ( [] {}) et, comme il n'existe pas
un accès à l'environnement d'exécution global standard, aux constructeurs globaux tels que
String() et Number() ne sont pas disponibles. Aucun mot clé new dans
le code JavaScript mis en bac à sable et les fonctions n'ont pas accès au mot clé this.
Certaines méthodes de types natifs ont également été supprimées. Consultez la bibliothèque standard pour obtenir
liste exhaustive des méthodes de types natifs compatibles.
Format du code du modèle personnalisé
Le code écrit pour implémenter un modèle personnalisé représente le corps d'un
qui sera exécutée chaque fois que votre balise est déclenchée ou que votre variable est
évalué. Cette fonction comporte un seul paramètre de données (data) qui contient toutes les
configurées dans l'interface utilisateur pour cette balise ou instance de variable, les clés étant définies
par les noms des paramètres de modèle spécifiés dans le modèle personnalisé.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/25 (UTC).
[null,null,["Dernière mise à jour le 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']);"]]