27

Ich versuche, die asynchrone Version des Google Analytics-Tracking-Codes zu einer Website hinzuzufügen.Verwenden von Google Analytics asynchronem Code aus der externen JS-Datei

Ich möchte das JavaScript in einer separaten Datei speichern und von dort aufrufen.

Hier ist, was ich zur Zeit in meiner JS-Datei habe:

function addLoadEvent(func) { 
    var oldonload = window.onload; 
    if (typeof window.onload != 'function') { 
     window.onload = func; 
    } else { 
     window.onload = function() { 
      oldonload(); 
      func(); 
     } 
    } 
} 

function loadtracking() { 
    var _gaq = _gaq || []; 
     _gaq.push(['_setAccount', 'UA-XXXXXXX-X']); 
     _gaq.push(['_trackPageview']); 

     (function() { 
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
     })(); 
} 

addLoadEvent(loadtracking); 

Und hier ist es, was ich in dem <head> Tag meiner Master-Seite habe:

<script type="text/javascript" src="js/google-analytics.js" ></script> 

Allerdings gibt es Offensichtlich ein Problem, da ich nach ein paar Tagen keine Statistiken bekomme!

Irgendwelche Ideen, was ich ändern muss?

Danke, Neil


EDIT: Ok ... Nach einigem Feedback unten, ich werde den neuen aktuellen Inhalt meiner Js-Datei hinzuzufügen. Ich werde es auf dem neuesten Stand halten, damit es, wenn es gelöst wird, anderen Menschen hoffentlich hilft, ähnliche Dinge zu tun.

var _gaq = _gaq || []; 

function loadtracking() { 
     window._gaq.push(['_setAccount', 'UA-XXXXXXX-X']); 
     window._gaq.push(['_trackPageview']); 

     (function() { 
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
     })(); 
} 

loadtracking(); 
+0

Konnte das Ihr Problem lösen? Ich laufe auf das gleiche Problem, obwohl ich mein var _gaq global in der .js-Datei definiert hatte. Vielen Dank. –

+0

Soweit ich mich erinnere, ja, tat es. Um ehrlich zu sein, schlage ich für die meisten Anwendungen vor, den folgenden Ratschlägen zu folgen und den Code direkt in das Dokument zu schreiben ... Es war eine Voraussetzung für dieses spezielle Projekt, dass es in einer separaten Datei war, die es sein könnte oder auch nicht der Fall mit dir. – NeilD

+0

Ich habe viele ähnliche Threads auf SO gelesen und habe Leute gesehen, die sagen, dass es nichts anderes gibt als eine mögliche leichte Verzögerung beim Laden des Skripts, während andere gesagt haben, dass es mein Leben ruinieren und mich in die Hölle verurteilen wird. Ich brauche es, um dif-Werte basierend auf der angezeigten Seite zu übergeben, und möchte Code-Änderungen in einer einzigen Datei statt auf jeder Seite der Website beibehalten.Es scheint gut zu funktionieren, aber wenn Sie sich an irgendwelche Probleme erinnern können, die Sie kennengelernt haben, lassen Sie es mich wissen. Bin dankbar. –

Antwort

22

Ihr "var _gaq" befindet sich in einer Funktion. Das bedeutet, dass es innerhalb dieser Funktion lokal beschränkt ist und nicht global existiert. GA hängt von der globalen Variable _gaq ab. Wenn Sie es in einer Funktion wie dieser behalten möchten, referenzieren Sie es als window._gaq.

+2

** DANKE ** Ich habe var _gaq außerhalb meiner Funktion bewegt, es hat sofort funktioniert! – Airn5475

+0

Danke! Das hat unser Problem auch behoben :) –

14

Sie verpassen völlig den Punkt des asynchronen Tracking-Codes. Fügen Sie es nicht in eine externe Datei ein, denn das ist genau so, als würde man die alte synchrone GA einbeziehen.

Und am wichtigsten, verzögern Sie nicht den Tracking-Code zu window.onload, da es zu spät auslösen kann.

Wenn Sie den asynchronen GA verwenden, fügen Sie ihn einfach in das oberste Dokument in einem Inline-Skript-Tag ein. Dies ist die Empfehlung auf Google Analytics website auch.

Setzen Sie das asynchrone Snippet am Unterseite des <head> Abschnitt Ihrer Seiten, nach irgendwelchen anderen Skripten Ihre Seite oder Vorlage verwenden können.

+0

Ich nehme Ihren Punkt auf dem AddLoadEvent() - Code, und ich habe alle window.onload Teile entfernt ... :) Haben Sie etwas dagegen, wenn ich Sie bitten, mehr in die Tiefe zu gehen, wie die externe Datei es machen wird "Genau wie die alte synchrone GA". Warum würde die Aufteilung in eine separate Datei dazu führen, dass sie anders ausgeführt wird? Ich habe die Empfehlung gelesen, aber ich brauche in diesem Projekt, dass der GA-Code von der Masterseite getrennt ist. – NeilD

+3

Der große Vorteil des asynchronen Trackings ist, dass Sie Ereignisse in GA pushen können, bevor der Code geladen wurde. Sobald Ihre Seite Elemente in das Array _gaq schieben kann, können Sie Ereignisse speichern. Im Gegenteil, wenn Sie die Variable außerhalb Ihres Hauptscripts erzwingen, erzwingen Sie, dass die Verfolgung wartet, bis Ihr externes Skript heruntergeladen wurde. So ist es genau wie das alte Skript. –

+0

Ebenso erzwingen Sie, dass Ihre Ereignisse warten, bis die onload-Funktion über window.onload <--- ausgelöst wird, dass Sie noch länger warten müssen ... bis jedes Bild heruntergeladen ist; Was ist, wenn eine verzögerte Datei aufhört? –

Verwandte Themen