Интеграция Google Analytics в приложение GWT
-
20-09-2019 - |
Вопрос
Это должно быть совершенно просто, но я не могу заставить это работать, как бы я ни старался.Я пытаюсь использовать Google Analytics с приложением GWT.Насколько я понял, есть два способа сделать это:
Сначала синхронно, вставляя код отслеживания в конец HTML-страницы раздела <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 загружается, но это все.
Кто-нибудь добился работы Analytics с GWT?Кроме того, принимает ли _gaq имя страницы в качестве параметра trackPageview, поскольку все примеры, которые я видел, используют этот вызов:
_gaq.push(['_trackPageview()']);
(Конечно, мне это тоже не подходит.)
Решение
Это всего лишь предположение, но вам, вероятно, потребуется сослаться на хост-страницу (ту, на которой был включен JS-код Google Analytics) через $wnd
в JSNI вот так:
public static native void recordAnalyticsHit(String pageName) /*-{
$wnd.pageTracker._trackPageview(pageName);
}-*/;
Код JSNI (и вообще код GWT) запускается в iframe, чтобы сохранить чистоту пространства имен, поэтому вам нужен $wnd
ссылка на главное окно.
Другие советы
<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 для получения подробной информации.