Domanda

Ho un sacco di link che usano un target = " _blank " attributo da aprire in una nuova finestra. Voglio associare il tracciamento degli obiettivi di Google Analytics ai clic di questi link.

Per fare ciò, ho provato ad allegare un onclick = " pageTracker._trackPageview ('/ event / outgoing') " attributo ai collegamenti.

Ma ho scoperto che per i collegamenti con un target = " _blank " attributo, l'evento onclick Javascript viene ignorato. Quindi l'obiettivo non viene registrato. In altre parole, questo link registra correttamente l'obiettivo:

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

Ma questo non:

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

Qualcuno sa perché ciò potrebbe accadere? Supponendo che non ci sia una soluzione semplice, suppongo che dovrò usare Javascript per risolvere il problema. Il seguente codice registra correttamente un obiettivo (ma non apre il collegamento):

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');
}

Ma quando aggiungo alla funzione record_goal per aprire il collegamento ...

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

... quindi non riesce a tracciare l'obiettivo.

Qualcuno può dirmi perché questo potrebbe essere e cosa dovrei fare per aggirare questo problema? Cordiali saluti sto usando Prototype per Javascript.

È stato utile?

Soluzione

Potrebbe esserci un problema con i blocchi popup (sto pensando a Googlebar) che impedisce l'apertura della finestra e (con la presenza di onclick ) impedendo il codice onclick dalla corsa. Ad esempio, vedi this e questo problemi di suono simili che altre persone stanno riscontrando.

O potrebbe semplicemente essere che il codice del gestore dei clic stia generando un errore che impedisce il completamento del resto del codice. Vedi il mio commento alla tua domanda su come vincoli gli eventi. e.stop () potrebbe non riuscire in IE.

La tua ipotesi è tuttavia falsa. target = " _blank " e onclick = " ... " funzionano bene insieme.

Prova al punto: http://jsbin.com/anahe (aggiungi / edit all'URL per modificare il codice). Potrebbe essere necessario disattivare i blocchi dei popup :

<!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>

Facendo clic sul collegamento si apre una nuova finestra e aggiorna il div con il numero di volte in cui è stato fatto clic sul collegamento. Testato in IE6, IE7, FF2, FF3.5, Chrome 2, Chrome 3, Opera 9.

Altri suggerimenti

È possibile, victor ha ragione e.stop () non è necessario, posso confermare che il seguente codice apre correttamente una nuova scheda e avvisa in modo asincrono sulla vecchia scheda (facendo di conseguenza riacquisire lo stato attivo).

<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 prossima cosa migliore è avere una pagina di tracciamento dei collegamenti e instradare tutti i tuoi collegamenti esterni attraverso quella pagina.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top