2013-04-02 11 views
10

Kann ich ein Google Analytics-Ereignis senden und sofort navigieren, so?Senden eines Google Analytics-Ereignisses, dann sofortiges Navigieren

_gaq.push(['_trackEvent', 'foobar']); 
window.location = "/"; 

Wenn Google Analytics eine Art von AJAX-Request tut, wenn dies dann sollte es genannt wird, arbeiten, ob wir auf der Seite bleiben oder nicht. Meine Sorge ist, dass es scheint, dass es manchmal einfach Sachen in ein Array für die spätere Verarbeitung legt. Ich denke, das passiert erst, wenn Google Analytics noch keine Zeit für die Initialisierung hatte, aber ich bin mir sicher.

Ich habe einen Test mit GA-Debug, und es schien zu funktionieren, aber ich bin mir nicht sicher, ob das bedeutet, es wird immer abhängig von der Ladegeschwindigkeit und was nicht.

Kann ich das tun und nie irgendwelche Ereignisse verlieren?

Antwort

7

Die Art, wie ich getan habe, ist es etwa so:

_gaq.push(['_trackEvent', '...', '...', '...']); 
_gaq.push(function(){ 
    // do stuff here 
}); 

$('#logo').on('click', function(){ 
    var curPage = window.location.href; 
    _gaq.push(['_trackEvent', curPage, '#logo']); 
    _gaq.push(function(){ 
     window.location.href = '/'; 
    }); 
}); 

Der zweite Push-Anruf wird immer nach dem ersten Lauf, weil Google Warteschlangen alle Anrufe drücken, so dass die erste läuft und komplett , dann der zweite wird ausgeführt und abgeschlossen. Mit Google können Sie Funktionen in die Push-Methode einfügen, sodass Sie sie in die Warteschlange stellen können.

Quelle: https://developers.google.com/analytics/devguides/collection/gajs/#PushingFunctions

+0

Genau das, was ich gesucht habe. Vielen Dank! –

+0

Stellen Sie sicher, dass Sie viele Tests durchführen, wenn Sie dies versuchen.Nur weil der Aufruf _trackEvent _gaq.push zurückgegeben wurde, bedeutet dies nicht, dass die Daten aufgezeichnet wurden. Intern wird eine asynchrone Bildanforderung zum Senden der Daten verwendet, und Sie sind davon abhängig, in welcher Phase sich die Anforderung befindet, wenn die Seite für die neue Seite abgerissen wird. – mike

+0

Ich dachte, wenn _gaq.push() die Anfrage tatsächlich abschicken würde, wäre es egal, ob ich sofort weitermache - denn sobald die Anfrage gesendet wurde, muss der Browser nichts anderes tun, oder? Es sei denn, es gab einen Fehler beim Senden des Trackings, aber das wäre wahrscheinlich sowieso kaputt, egal ob ich weitergeleitet wurde oder nicht. –

0

Es scheint, dass Ihre Bedenken bezüglich des Verlusts des Ereignisses berechtigt sind, siehe this question. One answer Es scheint ein wenig zerbrechlich in Bezug auf Google ihren Code ändern, aber würde Sie die Ereignisverfolgung bestätigen, bevor Sie auf den Link navigieren. Das wäre wahrscheinlich "fast unmittelbar".

5

Ich füge eine leichte Verzögerung (via setTimeout), wenn die neue Seite wird in einem neuen Fenster nicht geöffnet werden kann.

Ich hatte noch keine Gelegenheit, dies zu versuchen, aber Googles neue Universal Analytics hat eine hitCallback Funktion, die ausgeführt wird, nachdem die Daten gesendet wurden.

+0

Wow, das ist hervorragend und genau dafür gemacht. Vielen Dank für den Link! –

1

@mike erwähnt hitCallback Methode, die in analytics.js Dokumentation beschrieben:

In einigen Fällen, wie wenn man externe Links erfassen, möchten Sie vielleicht wissen, wenn der Tracker Daten getan sendet. Auf diese Weise können Sie einen Nutzer erst dann an sein Ziel senden, wenn sein Klick an Google Analytics gemeldet wurde. Um dies zu beheben, können Sie mit dem Send-Befehl eine hitCallback-Funktion im Feld name-Objekt angeben, die ausgeführt wird, sobald analytics.js das Senden von Daten abgeschlossen hat.

was fantastisch ist, mit Ausnahme der Schnipsel ist noch in der öffentlichen Beta. Wenn aus irgendeinem Grund (ahem technophobic Politik ahem) Sie ga.js Funktionalität beschränkt sind, können Sie verwenden this workaround:

_gaq.push(['_set', 'hitCallback', function(){ 
    document.location='someOtherPage.html'; 
}]); 
_gaq.push(['_trackEvent', 'category', 'event', 'value']); 

Ein weiterer sinnvoller Vorschlag, einen Rückfall haben, wird der Rückruf sofort ausgeführt haben wenn _gaq nicht definiert ist.

Verwandte Themen