2010-03-04 7 views
9

Je change de site pour utiliser Google Analytics asynchrone, et je suis curieux de savoir si c'est une méthode de pousser les événements vers le tableau _gaq. Dans la mesure où je peux dire, les événements sont placés dans un modèle d'attente dans _gaq pendant que le script ga.js est téléchargé de manière asynchrone. Se déclenchent-ils une fois le script téléchargé et comment les événements de chargement post-document sont-ils suivis?Quand et comment fonctionne Google Analytics asynchrone?

Un exemple est un utilisateur cliquant sur un lien 10 secondes après le chargement de la page - selon la documentation, l'événement doit être placé dans le _gaq. Comment le script d'analyse détecte-t-il cela?

Répondre

8

La partie générale est décrite par le Google Analytics Async doc.

Pour pousser un appel API sur la file d'attente, vous devez le convertir de la syntaxe JavaScript traditionnelle en un tableau de commandes. Les tableaux de commande sont simplement des tableaux JavaScript conformes à un certain format. Le premier élément d'un tableau de commandes est le nom de la méthode de l'objet de suivi que vous voulez appeler. Ce doit être une chaîne. Le reste des éléments sont les arguments que vous souhaitez transmettre à la méthode de l'objet de suivi. Ceux-ci peuvent être n'importe quelle valeur JavaScript.

Je vais essayer d'expliquer les détails croustillants: _gaq est juste une plaine JavaScript Array, et tous les tableaux ont la méthode push pour ajouter une entrée à la fin du tableau. Ainsi, avant que le script Analytics ne soit chargé, toutes les commandes seront poussées vers le tableau. À la fin du script Analytics, il remplace la méthode _gaq.push par une méthode personnalisée et exécute toutes les entrées du tableau _gaq. La nouvelle méthode _gaq.push exécutera la méthode de suivi instantanément. Ainsi, lorsque vous exécutez la méthode push 10 secondes après le chargement de la page, la commande doit être exécutée.

+2

J'ai fait de la journalisation sur le _gaq, et avant que le script soit chargé, c'est juste un tableau simple. Une fois le script retiré, le _gaq est converti en un objet analytique traditionnel, ce qui vérifie ce que vous dites. –

0

Il est toujours difficile de masquer le code google analytics, mais si je devais résoudre ce problème, lors du chargement du script, je redéfinirais la fonction push sur la baie après avoir traité tout dans la file d'attente de backlog (_gaq). De cette façon, la fonction push redéfinie servirait simplement de proxy aux appels de fonction réels sur l'objet pageTracker.

Voici un exemple simple de redéfinir la méthode push sur un objet de tableau:

var foo = []; 
foo.push("one");      // pushes "one" onto the array 
foo.push("two");      // pushes "two" onto the array 
foo.push = function(a) { alert(a) }; // redefines `push` 
foo.push("three");     // alerts "three" 
alert(foo);       // alerts "one,two"