Race-Bedingung, und die Verwendung von Google Analytics Asynchron (_gaq) synchron
Ich habe eine website, die mit Google Analytics neueren asynchronen tracking-Methode (_gaq). Das problem, das ich habe ist, dass ich möchte-Institut einige spezifische link-tracking und mache mir sorgen, dass ich die Schaffung einer race-Bedingung.
Im Grunde, es ist eine news-website, so hat es Schlagzeilen, die Links zu Geschichten, die alle über dem Platz. Eine überschrift für eine Geschichte, die eventuell auch in 3 verschiedenen Orten auf einer Seite, und auf Hunderten von anderen Seiten. Also, um zu verstehen, wie unsere Zielgruppe ist die Interaktion mit der Website haben wir zu verfolgen, wie die jeweils spezifischen headline-block verwendet wird, und nicht nur das Ziel. Aufgrund dieser beiden Bestimmungen tracking einzelner Seiten, noch tracking genannten Seiten nicht genug, wir haben zu verfolgen, die einzelnen links.
Also wenn ich einen link.
<a href="http://www.blah.com" onclick="_gaq.push('_trackEvent','stuff')">Here</a>
Weil _gaq.push() ist eine asynchrone aufrufen, ist es nicht möglich, dass die änderung der Seite auftreten, vor Google Vollendung des Klick-tracking? Wenn ja gibt es eine Möglichkeit, dass zu verhindern, oder muss ich ein Missverständnis über die Art und Weise, dass Google Analytics Async-Funktionen (http://code.google.com/apis/analytics/docs/tracking/asyncUsageGuide.html).
- Antwort für eine ähnliche Frage: stackoverflow.com/a/12461558/1406807
- Antwort für eine ähnliche Frage: stackoverflow.com/a/12461558/1406807
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hast Recht. Wenn der browser die Seite verlassen, bevor es sendet das GA-tracking-Beacons (gif-Treffer) für die Veranstaltung, die Veranstaltung wird nicht aufgezeichnet. Dies ist nicht neu in der async-code jedoch, da der Prozess der das senden der tracking-beacon ist asynchron; der alte code war in der gleichen Weise in dieser Hinsicht. Wenn das tracking wirklich wichtig sind, könnten Sie etwas wie das hier tun:
Hiermit beenden Sie den browser, gehen Sie auf die nächste Seite, wenn der link angeklickt wird, wenn die GA wurde bereits geladen (es ist wahrscheinlich am besten nicht die user so lange warten). Dann sendet er das Ereignis und wartet 200 Millisekunden, die der Benutzer an den href des Links Sie angeklickt haben. Dies erhöht die Wahrscheinlichkeit, dass das Ereignis aufgezeichnet werden. Sie können die Wahrscheinlichkeit erhöhen, sogar noch mehr, indem Sie den timeout länger, aber das kann auch weh user-Erfahrung in den Prozess. Es ist eine balance, die Sie haben zu Experimentieren mit.
Ich habe auch dieses problem, und bin entschlossen, Sie zu finden ein real Lösung.
Was über drücken der Funktion in die Warteschlange?
<a href="http://whatever" onclick="code(); return false;">
_trackEvent
Methode selbst ist asynchron, es ist nur das brennen der XHR-request, was zählt. Also die Ausführung der 2. Funktion sollte so lange gesperrt, bis_trackEvent
ausgeführt hat, nicht?Vom Die Google-Dokumentation für universal analytics (neue version, da die meisten anderen Antworten zu dieser Frage). Sie können jetzt ganz einfach geben Sie einen Rückruf.
Für die übersichtlichkeit würde ich empfehlen, verwenden Sie diese syntax, das macht es klarer, welche Eigenschaften Sie senden und einfacher, mehr hinzuzufügen :
[Hier ist ein vollständige Liste der Parameter für alle möglichen
ga
Anrufe.]Zusätzlich habe ich die
transport
parameterbeacon
(eigentlich nicht nötig, denn es wird automatisch gesetzt, wenn zutreffend):Also, wenn die Verwendung
navigator.beacon
die navigation wird nicht unterbrochen die Verfolgung . Leider Microsoft den support für beacon ist nicht existent so sollten Sie dennoch legte die Umleitung in einem callback.In event-handler-Sie sollten setup Treffer callback:
senden Sie Daten
- und Stopp-Ereignis-Verarbeitung
Ich versuche einen neuen Ansatz, wo bauen wir die URL für utm.gif uns, und fordern Sie es, dann nur nach Eingang der Antwort (gif) schicken wir die Nutzer auf Ihre Weise:
Verwendung:
Code (CrumbleCookie aus: http://www.dannytalk.com/read-google-analytics-cookie-script/)
Mit onmousedown statt onclick kann auch helfen. Es beseitigt nicht die race-condition, aber es gibt GA einen Vorsprung. Es gibt auch die Sorge, jemand klickt auf einen link und ziehen Weg vor dem loslassen der Maus-Taste, aber das ist wohl vernachlässigbar Fall.