Question

J'ai un tas de liens qui utilisent un target = " _blank " attribut à ouvrir dans une nouvelle fenêtre. Je souhaite associer le suivi des objectifs Google Analytics aux clics effectués sur ces liens.

Pour ce faire, j'ai essayé de joindre un onclick = "pageTracker._trackPageview ('/ event / outgoing') " attribuer aux liens.

Mais j’ai découvert que pour les liens avec un target = " _blank " attribut, l'événement Javascript onclick est ignoré. Donc, le but n'est pas enregistré. En d'autres termes, ce lien enregistre avec succès l'objectif:

<a href="http://www.yahoo.com" onclick="pageTracker._trackPageview('/event/outgoing')">Click me</a>

Mais cela ne veut pas:

<a href="http://www.yahoo.com" target="_blank" onclick="pageTracker._trackPageview('/event/outgoing')">Click me</a>

Quelqu'un sait-il pourquoi cela pourrait se produire? En supposant qu'il n'y ait pas de solution facile, je suppose que je vais devoir utiliser Javascript pour résoudre le problème. Le code suivant enregistre avec succès un objectif (mais n'ouvre pas le lien):

function attach_goal_tracking() {
    var links = document.getElementsByClassName("buyTicketsLink");
    for(var i=0; i<links.length; i++) {
        links[i].onclick = record_goal;
        }
}

function record_goal(e) {
    e.stop();
    pageTracker._trackPageview('/event/outgoing');
}

Mais quand j'ajoute à la fonction record_goal pour ouvrir le lien ...

function record_goal(e) {
    e.stop();
    pageTracker._trackPageview('/event/outgoing');
    var newWindow = window.open(this.getAttribute('href'), '_blank');
    newWindow.focus();
    }

... alors il ne parvient pas à suivre l'objectif.

Quelqu'un peut-il me dire pourquoi cela pourrait être et ce que je devrais faire pour résoudre ce problème? Pour info, j'utilise un prototype pour Javascript.

Était-ce utile?

La solution

Il y a peut-être un problème avec les bloqueurs de popup (je pense à Googlebar) qui empêchait l'ouverture de la fenêtre et (avec la présence de onclick ) empêchant le code onclick de courir. Par exemple, consultez this et ceci a des problèmes de sonorité semblables à ceux d’autres personnes.

Ou il se peut simplement que le code du gestionnaire de clics génère une erreur qui empêche ensuite le reste du code de se terminer. Voir mon commentaire à votre question sur la manière dont vous vous engagez aux événements. e.stop () peut échouer dans IE.

Votre hypothèse est cependant fausse. target = "_blank" et onclick = "..." fonctionnent parfaitement bien ensemble.

Testcase in point: http://jsbin.com/anahe (ajouter / éditer à l’URL pour éditer le code). Vous devrez peut-être désactiver votre ou vos bloqueurs de fenêtres contextuelles :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Sandbox</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<script>var clickCount= 0;</script>
</head>
<body>
  <a href="http://www.google.com" target="_blank" onclick="document.getElementById('dbg').innerHTML = ++clickCount">
     open new
  </a>
  <div id="dbg"></div>
</body>
</html>

Un clic sur le lien ouvre une nouvelle fenêtre et met à jour la div avec le nombre de fois où le lien a été cliqué. Testé dans IE6, IE7, FF2, FF3.5, Chrome 2, Chrome 3, Opera 9.

Autres conseils

C’est possible, victor a raison, e.stop () n’est pas nécessaire, je peux confirmer que le code suivant ouvre avec succès un nouvel onglet et envoie des alertes de manière asynchrone sur l’ancien onglet (ce qui le rend de nouveau actif).

<a href="" target="_blank">reload</a>

<script>

var as = document.getElementsByTagName('a');
for (var i = 0; i < as.length; i++) {
    var a = as[i];
    a.onclick = function(e) {
        setTimeout(function() {
            alert('hi hi');
        }, 1000);
    }
}

</script>

La meilleure chose à faire est d’avoir une page de suivi des liens et d’acheminer tous vos liens externes via cette page.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top