问题
This should be totally simple but I can't get it working no matter what I try. I'm trying to use Google Analytics with GWT application. From what I understood, there are two way to do it:
First is synchronous, by inserting tracking code at the end of <head> section HTML page and then calling this method:
public static native void recordAnalyticsHit(String pageName) /*-{
pageTracker._trackPageview(pageName);
}-*/;
Second is asynchronous, by inserting tracking code just after <body> tag and then calling this method:
public static native void recordAnalyticsHit(String pageName) /*-{
_gaq.push(['_trackPageview(' + pageName + ')']);
}-*/;
When running each of those methods, however, I get this exceptions in hosted mode:
[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
When observing site in Firebug, I see that ga.js gets loaded, but that's about it.
Did anyone get Analytics working with GWT? Also, does _gaq accept page name as trackPageview parameter, since all the examples I've seen use this call:
_gaq.push(['_trackPageview()']);
(Of course, that also doesn't work for me.)
回答1:
This is just a guess, but you probably need to reference the host page (the one where the Google Analytics JS code has been included) via $wnd
in the JSNI, like this:
public static native void recordAnalyticsHit(String pageName) /*-{
$wnd.pageTracker._trackPageview(pageName);
}-*/;
JSNI code (and in general, GWT code) is run in a iframe to keep the namespace clean, that's why you need the $wnd
reference to the main window.
回答2:
<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>
See http://www.google.com/support/analytics/bin/answer.py?hl=en&answer=55485 for details.
来源:https://stackoverflow.com/questions/2457794/integrating-google-analytics-into-gwt-application