2010-03-16 36 views
16

Điều này hoàn toàn đơn giản nhưng tôi không thể làm cho nó hoạt động bất kể tôi cố gắng gì. Tôi đang cố gắng sử dụng Google Analytics với ứng dụng GWT. Từ những gì tôi hiểu, có hai cách để làm điều đó:Tích hợp Google Analytics vào ứng dụng GWT

Đầu tiên là đồng bộ, bằng cách chèn mã theo dõi vào cuối < đầu trang HTML > phần và sau đó gọi phương pháp này:

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

Thứ hai là không đồng bộ, bằng cách chèn mã theo dõi ngay sau < cơ thể > thẻ và sau đó gọi phương pháp này:

public static native void recordAnalyticsHit(String pageName) /*-{ 
    _gaq.push(['_trackPageview(' + pageName + ')']); 
}-*/; 

Khi chạy mỗi người phương pháp, tuy nhiên, tôi nhận được ngoại lệ này trong hos chế độ ted:

[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 

Khi quan sát trang web trong Firebug, tôi thấy rằng ga.js được tải, nhưng đó là về nó.

Có ai có Analytics làm việc với GWT không? Ngoài ra, không _gaq chấp nhận tên trang như tham số trackPageview, vì tất cả các ví dụ tôi đã nhìn thấy sử dụng cuộc gọi này:

_gaq.push(['_trackPageview()']); 

(. Tất nhiên, điều đó cũng không làm việc cho tôi)

+4

Để bạn biết _gaq.push (['_ trackPageview()']); là một lỗi trong tài liệu của Google. Nó phải là _gaq.push (['_ trackPageview']); không có parens. – Brian

+1

bạn có thể sử dụng gwt-gatracker (https://code.google.com/p/gwt-gatracker/) giúp cuộc sống của bạn dễ dàng hơn nhiều –

Trả lời

23

Đây là chỉ là một phỏng đoán, nhưng có lẽ bạn cần phải tham khảo trang chủ (một trong những nơi mã JS Google Analytics đã được bao gồm) thông qua $wnd trong JSNI, như thế này:

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

JSNI mã (và nói chung, GWT mã) được chạy trong iframe để giữ cho không gian tên được sạch sẽ, đó là lý do bạn cần tham chiếu $wnd tới cửa sổ chính.

+1

Vâng, đúng vậy. Cảm ơn. – Domchi

+1

Điều này tất nhiên cũng sẽ hoạt động với 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> 

Xem http://www.google.com/support/analytics/bin/answer.py?hl=en&answer=55485 để biết chi tiết.

+0

Antonio, bạn có thể giải thích câu trả lời của mình không? Câu hỏi về việc gọi Google Analytics từ mã Java GWT. – Domchi

+0

Thực ra tôi chỉ muốn nói hai điều: 1) ga.js nên được bao gồm trước khi mã GWT gọi nó; 2) $ wnd.pageTracker._trackPageview (pageName); không hoạt động đối với tôi và tôi phải sử dụng mã tôi tìm thấy trong Câu hỏi thường gặp chính thức của Google. – Antonio

Các vấn đề liên quan