Convertir une balise existante

Dans ce guide, vous apprendrez à convertir une balise HTML personnalisée existante en utiliser du code JavaScript en bac à sable ;

Ce tutoriel utilise l'API injectScript. injectScript est une valeur courante API utilisée pour convertir un tag existant qui repose sur des scripts tiers. Ces les balises configurent souvent des fonctionnalités de base pendant le chargement d'un script, avant de les enrichir avec des fonctionnalités supplémentaires après le chargement du script.

Tag d'origine

<!-- Google Analytics -->
<script>
  window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
  ga('create', 'UA-XXXXXX-1', 'auto');
  ga('send', 'pageview');
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>
<!-- End Google Analytics -->

Convertir le code

Prenons l'exemple de la partie JavaScript de la balise ci-dessus:

window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXXX-1', 'auto');
ga('send', 'pageview');

Pour créer le code JavaScript de bac à sable nécessaire, examinez le code JavaScript natif les API utilisées par ce script, et convertissez votre code pour utiliser l'environnement de bac à sable équivalent API JavaScript.

Par exemple, dans la balise analytics.js, les API JavaScript natives suivantes sont utilisées :

JavaScript natif Code JavaScript de bac à sable
window.ga setInWindow
arguments createArgumentsQueue
+ new Date getTimestamp

Pour utiliser les API JavaScript en bac à sable dans votre script, vous devez les require. Par exemple, pour utiliser l'API setInWindow(), ajoutez-la en haut de votre script:

const setInWindow = require('setInWindow');

Convertissez ensuite window.ga :

window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)}
// becomes
const createArgumentsQueue = require('createArgumentsQueue');
const ga = createArgumentsQueue('ga', 'ga.q');

Ensuite, convertissez l'attribution ga.l:

ga.l=+new Date;
// becomes
const getTimestamp = require('getTimestamp');
setInWindow('ga.l', getTimestamp(), true);

Enfin, convertissez les deux appels en ga():

ga('create', 'UA-XXXXXX-1', 'auto');
ga('send', 'pageview');
// becomes
const trackingId = data.trackingId;
ga('create', trackingId, 'auto');
ga('send', 'pageview');

Pour utiliser data.trackingId, ajoutez un champ à votre modèle:

  1. Accédez à l'onglet Fields, puis cliquez sur Add Field.

    Ajouter un champ

  2. Sélectionnez le type de champ Text input.

    Sélectionner la saisie de texte

  3. Remplacez l'ID text1 par trackingId.

    Mettre à jour l&#39;ID

À ce stade, vous avez converti la première balise <script/>, mais vous devez également pour charger le script secondaire.

Pour ce faire :

<script async src='https://www.google-analytics.com/analytics.js'></script>
// becomes
const injectScript = require('injectScript');
const url = 'https://www.google-analytics.com/analytics.js';
injectScript(url, data.gtmOnSuccess, data.gtmOnFailure, url);

La transmission d'un cacheToken à injectScript() active une optimisation. Pour le dans les cas suivants, le script analytics.js n'est chargé qu'une seule fois:

  • Un tag exécuté plusieurs fois
  • Plusieurs balises de ce modèle personnalisé dans le même conteneur.
  • Autres modèles personnalisés qui utilisent des injectScript() avec le même cacheToken

Autorisations

Si vous avez essayé d'exécuter ce code avant ce point, vous avez peut-être remarqué dans la console.

Erreur lors de l&#39;accès aux éléments généraux

Ces erreurs se produisent, car le code JavaScript de bac à sable nécessite que vous déclariez le et les URL auxquelles vous accédez. Dans cet exemple, vous devez accéder à ga.q, ga.l et ga, et que vous souhaitez injecter un script hébergé à https://www.google-analytics.com/analytics.js.

Pour configurer les autorisations Global Variables :

  1. Accédez à l'onglet Permissions, développez Accesses Global Variables, puis puis cliquez sur Add Key.

    Ajouter une clé dans l&#39;UI

  2. Utilisez ga pour la clé et cochez les cases Read, Write et Execute

    UI d&#39;ajout d&#39;une clé GA

  3. Répétez cette procédure pour ga.q et ga.l. Notez qu'il n'est pas nécessaire l'autorisation Execute.

    Variables globales terminées

À ce stade, si vous cliquez à nouveau sur Exécuter le code, une nouvelle erreur s'affiche dans la console. Cette fois, l'erreur mentionne Inject Scripts.

Erreur dans la console d&#39;injection de scripts

Pour configurer l'autorisation Inject Scripts:

  1. Ajoutez https://www.google-analytics.com/analytics.js à Allowed URL Match Patterns.

    Scripts d&#39;injection terminés

Lorsque vous cliquez sur Exécuter le code, la console ne devrait afficher aucune erreur. Vous avez la balise a bien été convertie en modèle personnalisé. Cliquez sur Save. et utiliser votre nouvelle balise comme n'importe quelle autre balise dans Google Tag Manager.

Tag entièrement converti

Le résultat JavaScript final exécuté en bac à sable doit se présenter comme suit:

const setInWindow = require('setInWindow');
const copyFromWindow = require('copyFromWindow');
const createArgumentsQueue = require('createArgumentsQueue');
const getTimestamp = require('getTimestamp');
const injectScript = require('injectScript');
const trackingId = data.trackingId;

const ga = createArgumentsQueue('ga', 'ga.q');
setInWindow('ga.l', getTimestamp(), false);
ga('create', trackingId, 'auto');
ga('send', 'pageview');
const url = 'https://www.google-analytics.com/analytics.js';
injectScript(url, data.gtmOnSuccess, data.gtmOnFailure, url);