2017-06-07 2 views
1

J'ai ce code décorer les URLs avec le cookie Analytics dans ma page Web.Désactiver async Google Analytics chargement

var tracker = window[window.GoogleAnalyticsObject].getAll()[0]; 
new window.gaplugins.Linker(tracker).decorate("http://www.toto.com"); 

Cela se produit une erreur:

fenêtre

[window.GoogleAnalyticsObject] .getAll est pas une fonction

window.gaplugins est non défini

Comme Google Analytics charger son Plugin asynchrone, j'imagine getAll() et gaplugins.linker fonctions ne sont pas encore déclarées. Je ne peux pas attendre le DOM prêt, donc je voudrais forcer le chargement du plugin GA synchroniquement.

Merci pour votre aide

Répondre

0

Utilisation de la documentation here (cf commentaires Eduardo), nous pourrions envoyer un message à l'enfant iframe:

<iframe id="destination-frame" src="https://destination.com"></iframe> 
<script> 
     ga('create', 'UA-XXXXX-Y', 'auto'); 
     ga(function(tracker) { 
      // Gets the client ID of the default tracker. 
      var clientId = tracker.get('clientId'); 

      // Gets a reference to the window object of the destionation iframe. 
      var frameWindow = document.getElementById('destination-frame').contentWindow; 
      // Sends the client ID to the window inside the destination frame. 
      frameWindow.postMessage(clientId, 'https://destination.com'); 
     }); 
</script> 

Et du côté iframe:

window.addEventListener('message', function(event) { 
     // Ignores messages from untrusted domains. 
     if (event.origin != 'https://destination.com') return; 
     ga('create', 'UA-XXXXX-Y', 'auto', { 
      clientId: event.data 
     }); 
}); 
1

Au lieu de forcer exécuter syncronously la meilleure option est d'utiliser une fonction de rappel pour exécuter votre code.

Comme ceci:

(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 

ga('create', 'UA-XXXXXX-1', 'auto'); 
ga('send', 'pageview'); 
ga(function(){ 
    // Code in here will only run after ga is loaded. 
    window.tracker = window[window.GoogleAnalyticsObject].getAll()[0]; 
    new window.gaplugins.Linker(tracker).decorate("http://www.toto.com"); 
}) 
+0

Merci, mais je ne peux pas le faire. Mon code est un générateur iframe appelé dans le chargement de la page comme var iframeUrl = new window.gaplugins.Linker (fenêtre [window.GoogleAnalyticsObject] .getAll() [0]). Decorate ("http: //www.toto. com "); document.write (' "); Et je ne peux pas changer l'attribut src dans un ga (function() {}) sin rafraîchir le contenu de l'iframe – GGO

+1

vous avez regardé dans la documentation pour le chargement des iframes? https://developers.google.com/analytics/devguides/collection/analyticsjs/cross-domain#iframes – Eduardo