将Google Analytics集成到GWT应用程序中

时间:2010-03-16 20:18:44

标签: gwt google-analytics google-analytics-api

这应该是非常简单的,但无论我尝试什么,我都无法工作。我正在尝试将Google Analytics与GWT应用程序结合使用。根据我的理解,有两种方法可以做到:

首先是同步,通过在< head>的末尾插入跟踪代码。部分HTML页面,然后调用此方法:

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

(当然,这对我也不起作用。)

2 个答案:

答案 0 :(得分:23)

这只是猜测,但您可能需要通过JSNI中的$wnd引用主机页面(包含Google Analytics JS代码的主页),如下所示:

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

JSNI代码(通常是GWT代码)在iframe中运行以保持名称空间清洁,这就是您需要$wnd对主窗口的引用的原因。

答案 1 :(得分: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