2012-02-16 113 views
6

我在使用Google Analytics並在分析請求完成後執行重定向。谷歌分析後執行JavaScript

我使用這個代碼:

var _gaq = _gaq || []; 

_gaq.push(['_setAccount', 'UA-12345678-1']); 

_gaq.push(['_trackPageview']); 

_gaq.push(function() { 
    window.location.replace("myRedirectToUri"); 
}); 

這是不正確執行。

重定向在Firefox上正確完成(作爲分析回調),但未在其他瀏覽器(IE,Chrome,Safari)上執行,因此我失去了分析數據。

目前我已經設置超時1秒,但這不是真正的解決方案。

任何幫助如何正確實施?

+0

見http://stackoverflow.com/questions/8147065/google-analytics-async-events-tracking-callback – 2012-02-16 14:33:41

+0

你有沒有試過用'window.location.href = url'取代'窗口。 location.replace(url)'? – Eduardo 2012-02-16 18:38:11

+0

與window.location.href = url :( – Amir 2012-02-17 08:56:37

回答

11

現在對這個問題沒有很好的解決方案。您可以做的最好做法是添加超時以延遲重定向。目前沒有_trackPageview的回調。當它返回時,意味着它開始了跟蹤,但在__utm.gif請求完成之前,它已成功註冊了綜合瀏覽量,這並不是保證。

1秒超時可能太多。我通常保持200-400毫秒的超時時間。

var _gaq = _gaq || []; 

_gaq.push(['_setAccount', 'UA-XXXXXXX-X']); 

_gaq.push(['_trackPageview']); 

_gaq.push(function() { 
    setTimeout(function(){ 
     window.location.href = newUrl; 
    }, 200); 
}); 

編輯:

它過2次年以來我本來最初張貼了這個答案,因爲那麼谷歌Analytics(分析)已經走過了很長的路要走。

現在有這樣做有道:

var _gaq = _gaq || []; 

_gaq.push(['_setAccount', 'UA-XXXXXXX-X']); 

_gaq.push(['_set','hitCallback',function(){ 
    window.location.href = newUrl; 
}]); 

_gaq.push(['_trackPageview']); 

如果你已經使用analytics.js遷移到通用Analytics(分析)相當於是:

ga('create', 'UA-XXXXXXX-X') 

ga('send', 'pageview', { 
    'hitCallback': function() { 
    window.location.href = newUrl; 
    } 
}); 

EDIT 2

以下是更正確的方法,即使Google Analytics代碼被阻止或篡改,也要確保您的代碼得到執行通過擴展或adBlocker。

var t = undefined; 

var myCode = function(){ 
    window.clearTimeout(t); 
    t = undefined; 
    window.location.href = newUrl; 

}; 

t = setTimeout(myCode, 3000); 

ga('create', 'UA-XXXXXXX-X') 

ga('send', 'pageview', { 
    'hitCallback': myCode 
}); 
+1

)相同的行爲請小心,如果有人開啓了AdBlock或Ghostery,它將無法工作如果您想爲AdBlock用戶執行位置更改,請使用setTimeout而不將其推送到ga數組在一個函數中。 – DanFromGermany 2015-12-08 12:33:08