这应该是非常简单的,但无论我尝试什么,我都无法工作。我正在尝试将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()']);
(当然,这对我也不起作用。)
答案 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。