2011-12-12 6 views
7

estoy seguimiento de la Descargar botón clic en un sitio web que ofrece un proyecto mío con este código:Seguimiento de un botón de descarga, haga clic con Analytics mediante eventos

function trackDownload(link) { 
    try { 
     _gaq.push(['_trackEvent', 'Downloads', 'Click', 'Setup executable']); 
     setTimeout('document.location = "' + link.href + '"', 100); 
    } catch (err) {} 
    return false; 
} 

y el botón es algo como:

<a href="files/setup.exe" onclick="return trackDownload(this);">Download</a> 

Por lo tanto, cuando un usuario hace clic en él, se envía un evento a Analytics y luego se redirecciona al usuario al archivo.

Esto también se aplica en seguimiento de enlace externo, no hay diferencias.

Y ahora mi pregunta. ¿Puedo estar seguro de que el evento de Analytics se "procesa" antes de redirigir al usuario? Si no, ¿esa redirección hace que el evento se pierda? Actualmente se están realizando un seguimiento de los eventos, pero no puedo estar seguro de que todos sean.

leí también puedo probar algo un poco diferente, empujando la función de redirección en la cola Analítica:

_gaq.push(function() { document.location = link.href; }); 

Pero no está claro si esto funciona o si es sólo equivalente a la anterior. De hecho, here se dice que "las llamadas a _gaq.push [...] ejecutan comandos a medida que se presionan".

Respuesta

7

Tiene la razón en que puede push functions onto the analytics queue. Dado que las funciones o eventos de seguimiento se ejecuta/evalúan en el orden en que se empujó a la matriz, usted debe ser capaz de hacer esto:

function trackDownload(link) { 
    _gaq.push(['_trackEvent', 'Downloads', 'Click', 'Setup executable']); 
    _gaq.push(function() { document.location = link.href }); 
    return false; 
} 

Tenga en cuenta que el try/catch no es necesario ya push() ISN' Está documentado que arroja algo (y recomendaría eliminarlo ya que los bloques de captura vacíos pueden mask other problems).

le preguntas:

Pero no está claro si esto funciona o si es sólo equivalente a la anterior.

En el primer ejemplo (empuje, setTimeout), el evento se perderá si Analytics no ha terminado de cargar cuando lo hace la redirección (porque en ese momento, _gaq es sólo una matriz). En la versión con push(function..., el evento se registrará antes de la redirección, independientemente de si Analytics finalizó la carga en el momento en que el usuario pulsa el botón de descarga. Por esta razón, recomendaría usar push(function....

Tenga en cuenta que la versión push(function... esperará a que los análisis terminen de cargarse antes de que ocurra la redirección (que suena igual a la que desea), pero puede agregar una forma de manejar el caso donde no se carga el análisis.

+0

Tal vez pueda empujar la redirección en '_gaq' como publiqué, y luego repetirla en el bloque' catch' y en un 'setTimeout' más demorado (uno o dos segundos). Entonces, si algo sale mal con '_gaq', puedo estar seguro de que el usuario será redirigido tarde o temprano. –

+0

Acepto que un setTimeout retrasado es la forma de manejar el caso sin análisis.Sin embargo, creo que uno o dos segundos probablemente sea un poco rápido. Además, me acabo de dar cuenta de que no es necesario el bloque catch: actualizaré mi respuesta. –

+0

De hecho, no recuerdo por qué puse ese bloque 'try..catch' :) Acerca del tiempo de espera: Puedo configurar uno más largo (5 segundos) y un control giratorio en el botón cuando hago clic. Entonces, el usuario más rápido no tendrá la sensación de que no está pasando nada ... –

Cuestiones relacionadas