2012-11-16 10 views
8

Ich habe Google Analytics-Tracking-Code (GATC) auf meiner Website, der Aufrufe an die Methode _gaq.push im Google-Code auslöst.Überprüfen, ob das Google Analytics _gaq-Objekt geladen und verfügbar ist

In dem Szenario, dass GA nicht verfügbar ist oder _gaq nicht geladen wurde, möchte ich sicherstellen, dass ich keine JavaScript-Fehler auf der Seite habe. Wenn Sie überprüfen, dass _gaq nicht mit 'undefined' identisch ist - wird dies ausreichen, um zu überprüfen, ob es verfügbar ist und ist das x-Browser? Ich habe mir die Google-Dokumentation angesehen, aber nichts dazu.

Ich bin mir bewusst, zu überprüfen, ob das Objekt null ist, aber ich bin mir nicht sicher, ob dies notwendig ist.

if (typeof(_gaq) !== 'undefined') { 
    _gaq.push(['_trackEvent', 'Downloaded Video', 'Yes']); 
    _gaq.push(['rollup._trackEvent', 'Downloaded Video', 'Yes']);          
} 

Antwort

18

In dem empfohlenen Javascript-Code Sie von Analytics erhalten, enthält es die folgende Zeile:

var _gaq = _gaq || []; 

So sollte das Array immer zur Verfügung, wenn Sie diese Linie halten in Ihrem Code. Wenn Sie den Analysecode später hinzufügen, fügen Sie einfach die obige Zeile vor Ihren Hauptskripten hinzu und es wird funktionieren.

Beachten Sie, dass dieses Snippet harmlos ist, auch wenn Sie zuvor _gaq definiert haben, da es es nur als neues Array definiert, wenn es zuvor nicht definiert ist.

Dies ist eine großartige Möglichkeit, asynchrone Skripts zu verwenden, das Array wird zuerst lokal definiert und Sie können bei Bedarf Befehle an dieses Array senden. Wenn das Analysescript geladen wird, kann es diese Befehle verwenden, wenn es gewünscht wird. Es muss also nicht überprüft werden, ob das Array nicht definiert ist oder ähnliches.

+1

Ich möchte die Variable '_gaq' nicht neu definieren, da ich dies in dem von Google bereitgestellten Code eingestellt habe. Ich habe die Push-Anrufe an anderer Stelle in meinem eigenen Code. Das Neudefinieren von _gaq scheint riskant zu sein. – crmpicco

+3

Ich sage nicht, dass Sie es neu definieren sollten. Mein Punkt ist, dass, wenn Sie es bereits hinzugefügt haben, wie die Dokumente sagen, Sie nicht mehr nach undefiniert suchen können - und das müssen Sie nicht. – David

1

Wie @David sagte, solange Sie die var _gaq = _gaq || []; Schnipsel zuvor definiert haben, du bist in Ordnung und es gibt keine Notwendigkeit für _gaq undefiniert zu überprüfen.

Der Grund für _gaq als ein leeres Array definiert wurde, wenn es zuvor nicht definiert war, ist so, dass es eine Methode hat. Dadurch kann Ihr Analysecode ausgeführt werden, bevor der GA-Code geladen wird, oder in einigen Fällen, wenn er nicht verfügbar ist.

Wenn GA geladen wird, wird _gaq als Objekt mit einer push-Methode neu definiert, und alle vorhandenen Inhalte des alten _gaq-Arrays werden ausgeführt.

3

Wenn ga.js geladen wird, definiert es ein window._gat (Mind the T statt Q) globales Objekt, Sie müssen nur testen, ob es definiert ist oder nicht (aber Vorsicht, es wird asynchron geladen, dann können Sie Ihren Test verzögern) .

4

Sie müssen im Allgemeinen nicht überprüfen, ob es definiert ist, weil das Google Analytics-Code-Snippet dies für Sie erledigt. Wenn Sie jedoch etwas wie Ereignis-Tracking in anderen Abschnitten Ihres Sties tun, wie die Frage zeigt, ist es manchmal gut zu überprüfen, ob das Skript geladen ist, da es asynchron ist.

Ich schrieb ein jQuery Plugin Wrapper für GA und wollte den Code einchecken, ob GA tatsächlich installiert war oder nicht, bevor ich versuchte, irgendwelche Daten darauf zu schieben. Dies sollte den Fall abdecken, dass jemand versucht hat, das Plugin ohne GA zu benutzen oder bevor GA initialisiert wurde.

if (typeof(_gaq) == 'undefined') { 
    console.error("Google Analytics is not installed"); 
} 
+2

Das ist die richtige Antwort für mich. Wir geben Tracking-Scripts (google plus andere) nur auf Produktionsstandorten aus, daher ist auf dev/UAT _gaq nicht definiert. Und das funktioniert perfekt. Danke – Jag

+0

_gaq wird durch das Tracking-Snippet erstellt, nicht wenn ga.js geladen ist. Das ist nicht genug. Siehe http://StackOverflow.com/a/13450713/307687 statt –

50

Wenn Sie Universal Analytics verwenden (analytics.js) dieser Schalter:

_gaq.push(['_trackEvent', 'Downloaded Video', 'Yes']); 

dazu:

ga('send', 'event', 'Downloaded Video', 'Yes'); 
+1

Dies sollte als die richtige Antwort markiert werden. Danke für Ihre Hilfe. –

+0

Gut zu helfen :) – Mike

+1

@ Mr.Hardy Ich verwende nicht Universal Analytics, also kann ich das nicht als die richtige Antwort akzeptieren. – crmpicco

0

Sie können Ereignis hinzufügen möchten irgendwo in js Tracking, aber Das CMS fügt nur Google Analytics für nicht eingeloggte Besucher oder bestimmte Seiten hinzu. Die folgende Überprüfung für die Funktion wird funktionieren:

Verwandte Themen