27

Sto tentando di aggiungere la versione asincrona del codice di monitoraggio di Google Analytics a un sito Web.Utilizzo del codice asincrono di Google Analytics da file JS esterno

Mi piacerebbe mantenere il codice JavaScript in un file separato e chiamarlo da lì.

Ecco quello che ho attualmente avuto nel mio file .js:

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); 

Ed ecco quello che ho nel <head> tag della mia pagina Master:

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

Tuttavia, c'è ovviamente un problema come dopo pochi giorni, non sto ottenendo statistiche attraverso!

Qualche idea di cosa ho bisogno di cambiare?

Grazie, Neil


EDIT: Ok ... Dopo un po 'di feedback di seguito, ho intenzione di aggiungere i nuovi contenuto corrente del mio file .js. Lo terrò aggiornato in modo che se/quando questo venga risolto, si spera che possa aiutare altre persone a provare a fare cose simili.

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

Questo problema ha risolto il problema? Sto incontrando lo stesso problema, sebbene avessi il mio var _gaq definito globalmente nel file .js. Grazie. –

+0

Per quanto mi ricordo, sì lo ha fatto. Per essere onesti, per la maggior parte delle applicazioni, suggerirei di seguire il consiglio seguente e di inserire il codice direttamente nel documento ... Era un requisito per questo specifico progetto che fosse in un file separato, che può essere o non essere il caso con te. – NeilD

+0

Ho letto un sacco di thread simili su SO e ho visto persone dire che non c'è alcun problema al di fuori di un possibile leggero ritardo nel caricare la sceneggiatura, mentre altri hanno detto che mi rovinerà la vita e mi condannerò all'inferno. Ho bisogno che passi i valori dif in base alla pagina visualizzata e desideri mantenere le modifiche al codice in un singolo file piuttosto che su ogni pagina del sito web.Sembra funzionare bene, ma se riesci a ricordare eventuali problemi hai incontrato, fammi sapere. Apprezzalo. –

risposta

22

Il tuo "var _gaq" si trova all'interno di una funzione. Ciò significa che è localmente ambito all'interno di quella funzione e non esisterà globalmente. GA dipende dalla variabile globale _gaq. Se vuoi tenerlo all'interno di una funzione del genere, fai riferimento a window._gaq.

+2

** GRAZIE ** Ho spostato var _gaq al di fuori della mia funzione ha funzionato all'istante! – Airn5475

+0

Grazie! Questo ha risolto anche il nostro problema :) –

14

Manca completamente il punto del codice di monitoraggio asincrono. Non metterlo in un file esterno perché è esattamente come includere il vecchio GA sincrono.

E, soprattutto, non rinviare il codice di monitoraggio a window.onload in quanto potrebbe sparare troppo tardi.

Se si utilizza GA asincrono, è sufficiente inserirlo nella parte superiore del documento in un tag di script incorporato. Questa è la raccomandazione su Google Analytics website pure.

Inserire lo snippet asincrono al inferiore della sezione di <head> delle tue pagine , dopo qualsiasi altro script la pagina o il modello potrebbe utilizzare.

+0

Prendo il tuo punto sul codice AddLoadEvent() e ho rimosso tutte le parti window.onload ... :) Ti spiace se ti chiedo di approfondire il modo in cui il file esterno lo renderà "esattamente come includere il vecchio GA sincrono". Perché dividerlo in un file separato potrebbe causarne l'esecuzione in modo diverso? Ho letto la raccomandazione, ma in questo progetto ho bisogno che il codice GA sia separato dalla pagina principale. – NeilD

+3

Il grande vantaggio di avere il tracciamento asincrono è che puoi iniziare a spingere gli eventi in GA prima che il codice sia caricato. Non appena la tua pagina può iniziare a spingere elementi nell'array _gaq, puoi iniziare a memorizzare eventi. Al contrario, quando imposti la variabile al di fuori del tuo script principale, stai forzando il tracciamento ad attendere fino a quando lo script esterno non è stato scaricato. Ecco come è esattamente come la vecchia sceneggiatura. –

+0

allo stesso modo, forzando i tuoi eventi ad attendere fino a quando la funzione onload viene attivata tramite window.onload <--- ti costringerà ad aspettare ancora più a lungo ... fino a quando ogni immagine non viene scaricata; Cosa succede se un file ritardato viene riattaccato? –

Problemi correlati