这应该是非常简单的,但无论我尝试什么,我都无法工作.我正在尝试将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被加载了,但就是这样.
有没有人让Google Analytics与GWT合作?此外,_gaq是否接受页面名称作为trackPageview参数,因为我见过的所有示例都使用此调用:
_gaq.push(['_trackPageview()']);
(当然,这对我也不起作用.)
这只是猜测,但您可能需要$wnd
在JSNI中引用主机页面(包含Google Analytics JS代码的主机页面),如下所示:
public static native void recordAnalyticsHit(String pageName) /*-{ $wnd.pageTracker._trackPageview(pageName); }-*/;
JSNI代码(通常是GWT代码)在iframe中运行以保持名称空间清洁,这就是您需要$wnd
对主窗口的引用的原因.