2010-10-12 87 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在本地提供服務,我懷疑它不再需要,並且不希望通過添加橋邏輯。

相關問題