2010-11-25 17 views
1

Je veux suivre les utilisateurs en cliquant sur des liens vers des sites externes. Je suis heureux d'utiliser la version asynchrone de GA, car cela permet (dans la plupart des navigateurs) la page pour continuer le chargement au lieu de mettre un terme à la balise de script et d'attendre google-analytics.com/ga.js à télécharger et exécuter.Utilisez Google Analytics (version asynchrone) pour suivre les clics sortants sans casser target = _blank

Google recommends cette fonction:

<script type="text/javascript"> 
function recordOutboundLink(link, category, action) { 
    try { 
    var myTracker=_gat._getTrackerByName(); 
    _gaq.push(['myTracker._trackEvent', ' + category + ', ' + action + ']); 
    setTimeout('document.location = "' + link.href + '"', 100) 
    }catch(err){} 
} 
</script> 

<a href="http://www.example.com" onClick="recordOutboundLink(this, 'Outbound Links', 'example.com');return false;"> 

Les problèmes avec cette solution:

  • Il pourrait prendre 10ms, il pourrait prendre 300ms pour l'événement à être suivi, mais ça va changer la page après 100ms, peu importe ce qui se passe. Et si le suivi est trop lent, la page va changer avant d'être suivie.
  • document.location = signifie que le lien d'origine est ignoré et donc target = _blank ne pas ouvrir de nouveaux onglets/fenêtres.
+0

Voir aussi: http://stackoverflow.com/questions/10260818/google-analytics-record-outbound-links-open-new-window/12317986#12317986 – Jeff

Répondre

1

solutions possibles:

  • Occupé attente (do {curDate=new Date();} while(curDate-date<millis)) pour 100ms alors que le suivi a une chance d'envoyer de demande hors tension, puis return true. Mauvais parce que l'attente occupée consomme tout le processeur disponible.
  • Utilisez window.open afin que les nouveaux onglets/fenêtres peuvent être ouvertes, ce qui me conduit à mon favori actuel:

  • Dans le gestionnaire de clic utiliser $(this).attr("target", "_blank"); et puis juste return true après avoir poussé la commande de suivi sur _gaq.

Cela fonctionne parce qu'ouvrir un nouvel onglet quitte l'actuel pour terminer l'exécution de l'appel de suivi. Avec le seul petit inconvénient d'ouvrir toujours un nouvel onglet pour les liens externes, je ne vois pas d'autres problèmes.