2010-03-16 26 views
16

Esto debería ser totalmente simple, pero no puedo hacer que funcione sin importar lo que intento. Intento utilizar Google Analytics con la aplicación GWT. Por lo que entendí, hay dos vías para hacerlo:Integrando Google Analytics en la aplicación GWT

En primer lugar es síncrona, mediante la inserción de código de seguimiento al final de < cabeza página HTML > sección y luego llamar a este método:

public static native void recordAnalyticsHit(String pageName) /*-{ 
    pageTracker._trackPageview(pageName); 
}-*/; 

En segundo lugar está asíncrona, mediante la inserción de código de seguimiento justo después <cuerpo> etiqueta y luego llamar a este método:

public static native void recordAnalyticsHit(String pageName) /*-{ 
    _gaq.push(['_trackPageview(' + pageName + ')']); 
}-*/; 

Cuando se ejecuta cada uno de esos métodos, sin embargo, me sale esto excepciones en hos Modo de TED:

[ERROR] [myproject] Uncaught exception escaped 
com.google.gwt.core.client.JavaScriptException: (ReferenceError): pageTracker is not defined 

[ERROR] [myproject] Uncaught exception escaped 
com.google.gwt.core.client.JavaScriptException: (ReferenceError): _gaq is not defined 

Al observar sitio en Firebug, veo que ga.js. se carga, pero eso es todo.

¿Alguien consiguió Analytics trabajando con GWT? Además, hace _gaq aceptar nombre de la página como parámetro trackPageview, ya que todos los ejemplos que he visto utilizar esta llamada:

_gaq.push(['_trackPageview()']); 

(. Por supuesto, eso tampoco funciona para mí)

+4

Solo para que sepa _gaq.push (['_ trackPageview()']); fue un error en la documentación de Google. Debería ser _gaq.push (['_ trackPageview']); sin los parens. – Brian

+1

puede usar gwt-gatracker (https://code.google.com/p/gwt-gatracker/) lo que hace su vida mucho más fácil –

Respuesta

23

Este es sólo una suposición, pero es probable que necesite hacer referencia a la página principal (aquel en el que se ha incluido el código de Google Analytics JS) a través de $wnd en el JSNI, así:

public static native void recordAnalyticsHit(String pageName) /*-{ 
    $wnd.pageTracker._trackPageview(pageName); 
}-*/; 

código JSNI (y, en general, GWT código) se ejecuta en un iframe para mantener el espacio de nombres limpio, es por eso que necesita la referencia $wnd a la ventana principal.

+1

Sí, eso fue todo. Gracias. – Domchi

+1

Por supuesto, esto también funcionaría con GA async: $ wnd._gaq.push (['_ trackPageview', pageName]); – Brian

0
<script type="text/javascript"> 
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); 
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); 
</script> 

<script type="text/javascript"> 
    var pageTracker = _gat._getTracker("UA-xxxxxx-x"); 
    pageTracker._trackPageview("/subdirectory/pagename"); 
</script> 

Ver http://www.google.com/support/analytics/bin/answer.py?hl=en&answer=55485 para más detalles.

+0

Antonio, ¿puede por favor elaborar su respuesta? La pregunta era sobre llamar a Google Analytics desde el código Java GWT. – Domchi

+0

En realidad, solo quería decir dos cosas: 1) debe incluirse ga.js antes de que el código GWT lo llame; 2) $ wnd.pageTracker._trackPageview (pageName); no funciona para mí y tuve que usar el código que encontré en las preguntas frecuentes oficiales de Google. – Antonio