On Sep 25, 9:51 am, Pete <[EMAIL PROTECTED]> wrote:
> It seems like it should be possible to do something like this (see
> below) to integrate the new ga.jsanalyticsapi.  However, when i did
> it, all i got was trouble - very strange exceptions like
>
> java.lang.RuntimeException: Could not find a native method with the
> signature '[EMAIL PROTECTED]::setInnerHTML(Ljava/lang/
> String;)'
>         at
> com.google.gwt.dev.shell.ie.ModuleSpaceIE6.doInvokeOnWindow(ModuleSpaceIE6.java:
> 57)
>
> or
>
> 203.1/com.google.gwt.user/com/google/gwt/core/client/GWT.java(216):
> Failed to create JSNI method with signature
> '[EMAIL PROTECTED]::getVersion0()'
>
> Can anyone shed light on why this is happening?
>
> The error arose directly after calling new GoogleAnalytics(id) in my
> onModuleLoad() method.   Note, the constructor for the GoogleAnalytics
> object appears to succeed - but GWT is not happy after that call.

I have only investigated a bit, but the problem appears to be the GA
code and the compiled GWT code stepping on each other.  The solution I
used was to just put the GA script tag in the host html (ignoring the
business with http/https since I know the page will be only be
accessed via http) -- if you are using the standard linker, the GWT
code is isolated into an iframe -- and then reference it with the
attached class.  This is what I use for my own personal app and hasn't
been tested outside my environment, is unsupported, etc etc.  However,
if you do run into problems with it let me know and I will see what I
can do.

I use trackPageview(String) to set fake URLs based on the history
token, which I use to navigate the app.  That way I can track the GWT
app exactly the same as if it were static HTML.

public class Analytics {

  /**
   * Create a new tracker object.
   *
   * @param key Google Analytics key
   */
  public static native void getTracker(String key) /*-{
    try {
      // handle GA included at the top level or embedded
      $wnd._pageTracker = (_gat || $wnd._gat)._getTracker(key);
    } catch (e) {
      // TODO(jat): anything better to do here than fake the tracker?
    }
    if (!$wnd._pageTracker) {
      // alert("creating fake tracker");
      // create fake object
      $wnd._pageTracker = {
        _initData: function() {},
        _trackPageview: function() {},
        _setVar: function() {},
        _addTrans: function() {},
        _addItem: function() {},
        _trackTrans: function() {},
      };
    }
    $wnd._pageTracker._initData();
  }-*/;

  /**
   * Track a pageview based on the current URL
   */
  public static native void trackPageview() /*-{
    try {
      $wnd._pageTracker._trackPageview();
    } catch (e) {
    }
  }-*/;

  /**
   * Track a pageview for a given event.
   *
   * @param event the name of the event to record, which must start
with a slash
   */
  public static native void trackPageview(String event) /*-{
    try {
      $wnd._pageTracker._trackPageview(event);
    } catch (e) {
    }
  }-*/;

  /**
   * Set the segmentation variable.
   *
   * @param segment arbitrary string to identify the customer segment
   */
  public static native void setVar(String segment) /*-{
    try {
      $wnd._pageTracker._setVar(event);
    } catch (e) {
    }
  }-*/;

  /**
   * Build a transaction to be recorded.
   *
   * @param orderId
   * @param affiliation
   * @param total
   * @param tax
   * @param shipping
   * @param city
   * @param state
   * @param country
   */
  public static native void addTrans(String orderId, String
affiliation, String total,
      String tax, String shipping, String city, String state, String
country) /*-{
    try {
      $wnd._pageTracker._addTrans(orderId, affiliation, total,
        tax, shipping, city, state, country);
    } catch (e) {
    }
  }-*/;

  /**
   * Add a line item to an order.  addTrans must have previously been
called with the specified
   * orderId.
   *
   * @param orderId
   * @param sku
   * @param productName
   * @param category
   * @param price
   * @param quantity
   */
  public static native void addItem(String orderId, String sku, String
productName,
      String category, String price, String quantity) /*-{
    try {
      $wnd._pageTracker._addItem(orderId, sku, productName,
        category, price, quantity);
    } catch (e) {
    }
  }-*/;

  /**
   * Track a transaction.  addTrans and zero or more addItem calls
must have been made previously.
   */
  public static native void trackTrans() /*-{
    try {
      $wnd._pageTracker._trackTrans();
    } catch (e) {
    }
  }-*/;
}


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to