Pour installer OneTrust avec GTM, il faut cocher « support document.write ». Malheureusement, Matomo Tag Manager n’a pas cette option.

La documentation One Trust explique comment déployer la solution avec GTM, mais elle précise qu’il faut cocher « Support document.write », mais Matomo Tag Manager ne propose cette cette option.

Configuration OneTrust avec Google Tag Manager

 

Du coup, on va adapter le code qui va passer de ça :

<script src= »https://cdn.cookielaw.org/scripttemplates/otSDKStub.js » type= »text/javascript » charset= »UTF-8″ data-domain-script= »XXXXXXXXXXXXXXXXXXXXXXXXXXX » ></script>
<script type= »text/javascript »>
function OptanonWrapper() { }
</script>

à ça :

<script type= »text/javascript »>
// Fonction asynchrone pour charger le script OneTrust
async function loadOneTrustAsync() {
// Créer une nouvelle promesse pour gérer le chargement du script
await new Promise((resolve, reject) => {
var script = document.createElement(‘script’);
script.src = « https://cdn.cookielaw.org/scripttemplates/otSDKStub.js »;
script.type = « text/javascript »;
script.charset = « UTF-8 »;
script.setAttribute(‘data-domain-script’, ‘XXXXXXXXXXXXXXXXXXXXXXXXXXX’);

// Résoudre la promesse une fois que le script est chargé
script.onload = resolve;
script.onerror = reject;

// Ajoute le script au document
document.head.appendChild(script);
});

// Une fois le script chargé, appeler OptanonWrapper si nécessaire
OptanonWrapper();
}

// Appeler la fonction de chargement après que le DOM est entièrement chargé
if (document.readyState === ‘loading’) {
document.addEventListener(‘DOMContentLoaded’, loadOneTrustAsync);
} else {
// Si le script est ajouté après que le DOM est chargé
loadOneTrustAsync();
}
</script>

<script type= »text/javascript »>
function OptanonWrapper() {
// Votre code pour OptanonWrapper ici, si nécessaire
}
</script>

Ensuite on crée un custom HTML avec le declencheur page vue qui va synchroniser le contenu de dataLayer avec _mtm (Merci Ronan HELLOhttps://github.com/openmost/datalayer-sync)

<script>
window.dataLayer = window.dataLayer || [];
let syncdataLayer = function(array, callback) {
array.push = function(e) {
Array.prototype.push.call(array, e);
callback(array);
};
};

syncdataLayer(window.dataLayer, function(e) {
window._mtm.push(dataLayer.at(-1))
});
</script>