Pregunta

Tengo un montón de enlaces que usan un target = " _blank " atributo para abrir en una nueva ventana. Quiero adjuntar el seguimiento de objetivos de Google Analytics a los clics de estos enlaces.

Para hacer esto, intenté adjuntar un onclick = " pageTracker._trackPageview ('/ event / outgoing') " atribuir a los enlaces.

Pero descubrí que para enlaces con un objetivo = " _blank " atributo, se omite el evento onclick de Javascript. Entonces el objetivo no se registra. En otras palabras, este enlace registra con éxito el objetivo:

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

Pero esto no:

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

¿Alguien sabe por qué esto podría estar ocurriendo? Suponiendo que no haya una solución fácil, supongo que tendré que usar Javascript para resolver el problema. El siguiente código registra con éxito un objetivo (pero no abre el enlace):

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

Pero cuando agrego a la función record_goal para abrir el enlace ...

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

... entonces no puede rastrear el objetivo.

¿Alguien puede decirme por qué podría ser esto y qué debo hacer para solucionar este problema? FYI estoy usando Prototype para Javascript.

¿Fue útil?

Solución

Puede haber un problema con los bloqueadores de ventanas emergentes (estoy pensando en Googlebar) que impiden que se abra la ventana y (con la presencia de onclick ) impiden el código onclick de correr. Por ejemplo, consulte this y esto problemas de sonido similares que otras personas tienen.

O podría ser simplemente que el código del controlador de clics arroja un error que luego impide que se complete el resto del código. Vea mi comentario a su pregunta sobre cómo está vinculando los eventos. e.stop () puede estar fallando en IE.

Sin embargo, su hipótesis es falsa. target = " _blank " y onclick = " ... " funcionan bien juntos.

Caso de prueba en el punto: http://jsbin.com/anahe (agregue / edit a la url para editar el código). Es posible que deba desactivar los bloqueadores de ventanas emergentes :

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

Al hacer clic en el enlace, se abre una nueva ventana y actualiza el div con la cantidad de veces que se ha hecho clic en el enlace. Probé esto en IE6, IE7, FF2, FF3.5, Chrome 2, Chrome 3, Opera 9.

Otros consejos

Es posible, victor tiene razón, e.stop () no es necesario, puedo confirmar que el siguiente código abre con éxito una nueva pestaña y alerta asincrónicamente en la pestaña anterior (haciendo que recupere el foco).

<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 siguiente mejor opción es tener una página de seguimiento de enlaces y enrutar todos sus enlaces externos a través de esa página.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top