2010-03-16 4 views
16

Это должно быть абсолютно просто, но я не могу заставить его работать независимо от того, что я пытаюсь. Я пытаюсь использовать Google Analytics с приложением GWT. Из того, что я понял, есть два способа сделать это:Интеграция Google Analytics в приложение GWT

Первый является синхронным, вставив код отслеживания в конце < головки > разделе HTML-страницы и затем вызвать этот метод:

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

Во-вторых, асинхронный, вставив код отслеживания системы только после того, как < тела > тега, а затем вызывать этот метод:

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()']); 

(. Конечно, это тоже не работает для меня)

+4

Только что вы знаете _gaq.push (['_ trackPageview()']); была ошибкой в ​​документации Google. Это должно быть _gaq.push (['_ trackPageview']); без парнеров. – Brian

+1

вы можете использовать gwt-gatracker (https://code.google.com/p/gwt-gatracker/), который значительно упрощает вашу жизнь. –

ответ

23

Это только предположение, но, вероятно, нужно ссылаться на страницу хоста (тот, где был включен код Google Analytics JS) с помощью $wnd в JSNI, как это:

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

JSNI код (и вообще, GWT кода) запускается в iframe, чтобы сохранить пространство имен в чистоте, поэтому вам нужно $wnd ссылка на главное окно.

+1

Да, это все. Благодарю. – Domchi

+1

Это, конечно, также будет работать с 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> 

Для получения более подробной информации см. http://www.google.com/support/analytics/bin/answer.py?hl=en&answer=55485.

+0

Антонио, не могли бы вы рассказать о своем ответе? Вопрос касался вызова Google Analytics из Java GWT-кода. – Domchi

+0

На самом деле я просто хотел сказать две вещи: 1) ga.js должен быть включен до того, как код GWT называет его; 2) $ wnd.pageTracker._trackPageview (pageName); не работает для меня, и мне пришлось использовать код, который я нашел в официальном FAQ Google. – Antonio

Смежные вопросы