2012-02-16 7 views
6

Googleアナリティクスを使用しており、アナリティクスのリクエストが完了した後にリダイレクトしています。Googleアナリティクス後に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

あなたは 'window.location.href = url'の代わりに、'ウィンドウを使用しようとしましたhttp://stackoverflow.com/questions/8147065/google-analytics-async-events-tracking-callback –

+0

参照してください。 location.replace(url) '? – Eduardo

+0

window.location.href = url :( – Amir

答えて

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); 
}); 

編集:私はもともと最初にこの答えを投稿して以来、Google Analyticsは、長い道のりを歩んできましたので、それは2年ぶりだ

var _gaq = _gaq || []; 

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

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

_gaq.push(['_trackPageview']); 

そして、あなたが同等のanalytics.js使用してユニバーサルアナリティクスに移行した場合は、次のようになります:

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

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

EDIT 2

は今これを行うための適切な方法があります

これは、Googleアナリティクスのコードがブロックされたり改ざんされてもコードを実行するための適切な方法ですエクステンションまたは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ユーザの位置変更を実行する場合は、gA配列にプッシュしないでsetTimeoutを使用してください関数内で。 – DanFromGermany

関連する問題