2010-03-16 6 views
16

Questo dovrebbe essere totalmente semplice ma non riesco a farlo funzionare, non importa quello che cerco. Sto cercando di utilizzare Google Analytics con l'applicazione GWT. Da quello che ho capito, ci sono due modi per farlo:Integrazione di Google Analytics nell'applicazione GWT

In primo luogo è sincrona, con l'inserimento di codice di monitoraggio alla fine del < testa pagina HTML > sezione e quindi chiamando questo metodo:

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

In secondo luogo è asincrono, con l'inserimento di codice di monitoraggio subito dopo <corpo> tag e quindi chiamando questo metodo:

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

Durante l'esecuzione di ciascuno di questi metodi, tuttavia, ho questa eccezioni in hos Modalità 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 

Osservando sito in Firebug, vedo che ga.js viene caricato, ma che su di esso.

Qualcuno ha fatto funzionare Analytics con GWT? Inoltre, fa _gaq accettare nome della pagina come parametro di trackPageview, dal momento che tutti gli esempi che ho visto usare questa chiamata:

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

(. Naturalmente, questo anche non funziona per me)

+4

Proprio così si conosce _gaq.push (['_ trackPageview()']); era un bug nella documentazione di Google. Dovrebbe essere _gaq.push (['_ trackPageview']); senza i parens. – Brian

+1

puoi usare gwt-gatracker (https://code.google.com/p/gwt-gatracker/) che ti semplifica la vita –

risposta

23

Questo è solo una supposizione, ma probabilmente è necessario fare riferimento alla pagina host (quello in cui è stato inserito il codice di Google Analytics JS) tramite $wnd nel JSNI, in questo modo:

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

codice JSNI (e, in generale, GWT codice) viene eseguito in un iframe per mantenere pulito lo spazio dei nomi, ecco perché è necessario il riferimento $wnd alla finestra principale.

+1

Sì, era così. Grazie. – Domchi

+1

Naturalmente funzionerebbe anche 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> 

Vedi http://www.google.com/support/analytics/bin/answer.py?hl=en&answer=55485 per i dettagli.

+0

Antonio, puoi per favore elaborare la tua risposta? La domanda riguardava la chiamata di Google Analytics dal codice GWT di Java. – Domchi

+0

In realtà volevo solo dire due cose: 1) ga.js dovrebbe essere incluso prima che il codice GWT lo chiami; 2) $ wnd.pageTracker._trackPageview (pageName); non funziona per me e ho dovuto usare il codice che ho trovato nelle FAQ ufficiali di Google. – Antonio