13

Sin ningún otro framework JS (dojo, jquery, etc.¿Cómo cargo dinámicamente Google Analytics JavaScript?

La típica adecuada para cargar dinámicamente JS es hacer lo siguiente:

var gaJs = document.createElement("script"); 
gaJs.type = "text/javascript"; 
gaJs.src = "http://www.google-analytics.com/ga.js"; 
document.body.appendChild(gaJs); 
var pageTracker = _gat._getTracker("UA-XXXXXXXXX"); 
pageTracker._initData(); 
pageTracker._trackPageview(); 

Pero eso no funciona.

El archivo ga.js no se carga a tiempo para _gat._getTracker & _initData/trackPageview para funcionar.

Cualquier idea sobre cómo cargar adecuadamente dinámicamente ga.js.

ACTUALIZACIÓN: Parece que alguien ha intentado solucionar este problema en el siguiente enlace. Sin embargo, es para usar con el código anterior de Urchin y no con Google Analytics.

¿Alguna idea sobre cómo hacer que esto funcione con ga.js en lugar de urchin.js?

programación del lado del

http://20y.hu/20070805/loading-google-analytics-dynamically-on-document-load.html

+0

@Danny - ¿cuál recomendarías si también cambias el título? –

Respuesta

0

servidor sería más fácil, supongo, pero me encontré hace thissome tiempo. Observe que específicamente lo establece en el html head.

También verifique el primer enlace abajo en 'Agregar Javascript a Ajax'.

+0

@voyager - el primer enlace muestra cómo hacerlo utilizando el método que muestro en mi publicación, que no funciona. El segundo enlace describe la adición de JS al atributo HEAD html, que es indeseable ya que * bloqueará * la representación html. –

+0

@voyager - gracias por intentar responder :) –

0

Literalmente he puesto algo en común que hace esto ... usando jquery. El truco es agregar un evento de carga a la etiqueta del script con el código de seguimiento.

var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); 
var gaScript = document.createElement('script'); 
var loaded = false; 
gaScript.src = gaJsHost + "google-analytics.com/ga.js"; 

$(gaScript).load(function(){ 
    loaded = true; 
    var pageTracker = _gat._getTracker(Consts.google_analytics_uacct); 
    pageTracker._initData(); 
    pageTracker._trackPageview(); 
}); 

document.body.appendChild(gaScript); 

// And to make it work in ie7 & 8 
gaInterval = setInterval(function() { 
    if (!loaded && typeof _gat != 'undefined') { 
    $(gaScript).load(); 
    clearInterval(gaInterval); 
    } 
},50); 

Lo que estoy tratando de resolver es ... esto está permitido por google.

+0

la pregunta dice * sin * jquery – GarethD

1

Intente utilizar el código JavaScript exacto provisto por Google y luego exhiba condicionalmente esa sección de código basada en una construcción en su marco de interfaz de usuario. No dijiste en qué plataforma se está ejecutando, si es ASP.NET puedes poner el código en un PlaceHolder o UserControl y luego establecer Visible en verdadero o falso en función de una configuración de archivo de configuración si el script debe incluirse. Utilicé este enfoque en varios sitios para evitar que el script de Analytics se incluya en los entornos de preproducción.

0
 
function loadGA() 
{ 
    if(typeof _gat == 'function') //already loaded 
    { 
     //innitGA(); 
     // you may want the above line uncommented.. 
     // I'm presuming that if the _gat object is there 
     // you wouldn't want to. 
     return; 
    } 
    var hostname = 'google-analytics.com'; 
    var protocol = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); 
    js = document.createElement('script'); 
    js.setAttribute('type', 'text/javascript'); 
    js.setAttribute('src', protocol+hostname+'/ga.js'); 
    document.body.appendChild(js); 
    //2 methods to detect the load of ga.js 
    //some browsers use both, however 
    loaded = false; // so use a boolean 
    js.onreadystatechange = function() { 
     if (js.readyState == 'loaded') 
     { 
      if(!loaded) 
      { 
       innitGA(); 
      } 
      loaded = true; 
     } 
    }; 
    js.onload = function() 
    { 
     if(!loaded) 
     {   
      innitGA(); 
     } 
     loaded = true; 
    }; 
} 

function innitGA() 
{ 
    //var pageTracker = _gat._getTracker('GA_ACCOUNT/PROFILE_ID'); 
    //pageTracker._initData(); 
    //pageTracker._trackPageview(); 
    alert('oh hai I can watch plz?'); 
} 

a llamarlo loadGA() ... probado en IE6/7/8, FF3, Chrome y Opera

lo siento si soy un poco tarde a la fiesta.

5

Puede usar este fragmento de HTML5 Boilerplate.

<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. --> 
<script> 
    var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']]; 
    (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0]; 
    g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js'; 
    s.parentNode.insertBefore(g,s)}(document,'script')); 
</script> 
+1

puede pegar esto en una función, pero recuerde que _gaq tiene que ser un global (en el objeto ventana) – reconbot

Cuestiones relacionadas