Интеграция Google Analytics в приложение GWT
Это должно быть совершенно просто, но я не могу заставить его работать независимо от того, что я пытаюсь. Я пытаюсь использовать Google Analytics с приложением GWT. Из того, что я понял, есть два способа сделать это:
Сначала синхронно, вставив код отслеживания в конец <head> и затем вызывается этот метод:
public static native void recordAnalyticsHit(String pageName) /*-{
pageTracker._trackPageview(pageName);
}-*/;
Во-вторых, асинхронно, вставив код отслеживания сразу после <body> и затем вызов этого метода:
public static native void recordAnalyticsHit(String pageName) /*-{
_gaq.push(['_trackPageview(' + pageName + ')']);
}-*/;
Однако при запуске каждого из этих методов я получаю эти исключения в режиме размещения:
[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
При наблюдении за сайтом в Firebug я вижу, что ga.js загружается, но об этом.
Кто-нибудь заставлял Google Analytics работать с GWT? Кроме того, _gaq принимает имя страницы как параметр trackPageview, так как все примеры, которые я видел, используют этот вызов:
_gaq.push(['_trackPageview()']);
(Конечно, это тоже не работает для меня.)
Ответы
Ответ 1
Это просто предположение, но вам, вероятно, нужно ссылаться на главную страницу (ту, где был включен JS-код Google Analytics) через $wnd
в JSNI, например:
public static native void recordAnalyticsHit(String pageName) /*-{
$wnd.pageTracker._trackPageview(pageName);
}-*/;
Код JSNI (и вообще код GWT) запускается в iframe, чтобы сохранить пространство имен в чистоте, поэтому вам нужна ссылка $wnd
в главное окно.
Ответ 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>
Подробнее см. http://www.google.com/support/analytics/bin/answer.py?hl=en&answer=55485.