2010-10-12 85 views
1

我试图将谷歌分析跟踪添加到使用HTML和JavaScript创建的Adobe Air应用程序。将Google Analytics添加到Adobe Air HTML/Javascript应用程序

我曾尝试加入ga.js文件,并使用它就像我会在网页:

<script type="text/javascript" src="lib/js/ga.js"></script> 
<script type="text/javascript"> 
    var pageTracker = _gat._getTracker("UA-********-1"); 
    pageTracker._initData(); 
    pageTracker._trackPageview('/test'); 
</script> 

但是,这似乎并没有登记在分析仪表盘什么。

也尝试使用GA的Flash动作库,但我似乎无法创建一个GATracker的实例,因为它需要一个DisplayObject?

编辑

利用grapefrukt信息我尝试了以下内容:

air.Sprite = window.runtime.flash.display.Sprite; 
air.GATracker = window.runtime.com.google.analytics.GATracker; 

var tracker = new air.GATracker(new air.Sprite(), "UA-XXXXXXX-X", "AS3", false); 

,但我得到了以下错误: 类型错误:错误#1009:无法访问的属性或方法空对象引用

回答

2

注意:我原本误读你的问题是关于如何使用gaforflash,但我会发布这个,因为我已经键入它了nd可能有些用处。

无论你喜欢什么DisplayObject,你都可以使用构造函数,通常你会使用你的文档类,但是任何东西都可以工作。据我所知它只是用来显示调试信息。

var tracker:AnalyticsTracker = new GATracker(new Sprite, "UA-XXXXXXX-X", TrackerMode.AS3, false); 

设置TrackerModeAS3咱们闪光灯与跟踪服务器直接进行通信,所以你并不需要从谷歌服务器上的JavaScript。

我无法帮助您与js/as3之间的通信,但这应该相当容易。

+0

谢谢你的回答。我有一个去,改变语法来使用Adobe AIR/JavaScript,我得到这个错误:TypeError:错误#1009:无法访问空对象引用的属性或方法。 – JordanW 2010-10-12 15:47:49

+0

是的,我得到了同样的错误。做了一些研究,似乎[与在DisplayObject添加到舞台之前构建的GATracker相关](http://code.google.com/p/gaforflash/issues/detail?id=95#c2)。但是,我不认为它在JavaScript中实例化时不会上演。 – gschwa 2012-09-28 23:26:21

1

可能对OP没有用,但只花了整整一天的时间来解决这个问题,所以希望我的解决方案能够节省时间。

因此,ga.js代码无法直接从使用JavaScript编写的AIR应用程序中使用的原因是,AIR不会为存储在应用程序本身内的页面设置Cookie。为了解决这个问题,我将ga.js下载到了应用程序中,并对其进行了修改,使其不依赖于document.cookie函数。

在应用程序中,我有:

<script type="text/javascript"> 
    var cookies = {}; 
    document.__defineSetter__('_cookie', function(c) { 
     var epos = c.indexOf('='); 
     var spos = c.indexOf(';', Math.max(0, epos)); 
     if (epos == -1 || spos == -1) { return; } 
     var name = c.substring(0, epos); 
     var value = c.substring(epos + 1, spos); 
     cookies[name] = value; 
    }); 
    document.__defineGetter__('_cookie', function() { 
     var a = []; 
     for (var name in cookies) { 
      a.push(name + '=' + cookies[name]); 
     } 
     return a.join('; '); 
    }); 

    var _gaq = _gaq || []; 
    _gaq.push(['_setAccount', 'UA-XXXXXX-1']); 
    _gaq.push(['_trackPageview', path]) 
    (function() { 
     var ga = document.createElement('script'); 
     ga.type = 'text/javascript'; 
     ga.async = true; 
     // custom GA code which uses document._cookie instead of 
     // document.cookie 
     ga.src = 'js/ga.js'; 
     var s = document.getElementsByTagName('script')[0]; 
     s.parentNode.insertBefore(ga, s); 
    })(); 
</script> 

理想情况下,我们希望能够覆盖的cookie的方法,但不幸的是,它似乎并不可能WebKit中为AIR实现。所以在ga.js中,我用J._cookie替换了J.cookie的所有实例。一旦完成,ga.js应该相信它正在写cookies并正常运行。

为了充分披露,我实际上通过iframe访问了上述分析代码,但由于ga.js在本地提供服务,我怀疑它不再需要,并且不希望通过添加桥逻辑。

相关问题