2011-12-12 9 views
7

sto tracciamento della Scarica scatto del tasto su un sito web con un mio progetto con questo codice:Monitoraggio di un pulsante per il download fare clic Analytics che utilizzano eventi

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

e il pulsante è qualcosa come:

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

Così, quando un utente fa clic su di esso, un evento viene inviato ad Analytics e quindi l'utente viene reindirizzato al file.

Questo è applicabile anche al rilevamento di collegamento esterno , nessuna differenza.

E ora la mia domanda. Posso essere sicuro che l'evento Analytics sia "elaborato" prima che l'utente venga reindirizzato? In caso contrario, tale reindirizzamento causa la perdita dell'evento? eventi Attualmente vengono monitorati, ma non posso essere sicuro che tutte di loro sono.

ho letto posso anche provare qualcosa di un po 'diverso, spingendo la funzione di reindirizzamento in coda Analytics:

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

ma non è chiaro se questo funziona o se è solo equivalente a quello precedente. Infatti, here si dice che le chiamate "" a _gaq.push [...] eseguano comandi mentre vengono "".

risposta

7

Lei ha ragione nel senso che si può push functions onto the analytics queue. Dal momento che le funzioni o eventi di tracciamento vengano eseguiti/valutate nell'ordine in cui li avete spinto a matrice, si dovrebbe essere in grado di fare questo:

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

Si noti che il try/catch non è necessaria in quanto push() isn' Ho documentato di lanciare qualsiasi cosa (e mi raccomando di rimuoverlo dato che blocchi di cattura vuoti possono mask other problems).

vi chiedo:

ma non è chiaro se questo funziona o se è solo equivalente a quello precedente.

Nel vostro primo esempio (push, setTimeout), l'evento sarà persa se Analytics non ha terminato il caricamento quando si esegue il reindirizzamento (perché a quel tempo, _gaq è solo un array). Nella versione con il push(function..., allora l'evento sarà registrato prima che il reindirizzamento indipendentemente dal fatto che Analytics ha terminato il caricamento, al momento l'utente preme il pulsante di download. Per questo motivo, consiglierei di utilizzare push(function....

Attenzione, la versione push(function... attenderà che l'analisi finisca il caricamento prima che si verifichi il reindirizzamento (che suona come quello che vuoi comunque), ma potresti voler aggiungere un modo per gestire il caso in cui l'analisi non viene caricata.

+0

Forse posso spingere il reindirizzamento nel '_gaq' come ho postato, e poi ripeterla nel blocco' catch' e in modo più ritardato 'setTimeout' (uno o due secondi). Quindi se qualcosa va storto con '_gaq', posso essere sicuro che l'utente verrà reindirizzato prima o poi. –

+0

Concordo sul fatto che un setTimeout ritardato è il modo di gestire il caso non analitico.Tuttavia, penso che uno o due secondi sia probabilmente un po 'veloce. Inoltre, ho appena notato che il blocco catch non è necessario - aggiornerò la mia risposta. –

+0

In effetti, non ricordo perché ho messo il blocco 'try..catch' :) A proposito del timeout: posso fare uno più lungo (5 secondi) e uno spinner sul pulsante quando si fa clic. Quindi l'utente più veloce non avrà la sensazione che non stia accadendo nulla ... –

Problemi correlati