7

我有一个简单的页面,我需要执行一些GWO & GATC js,然后重定向到另一个url。在Google Analytics中使用JS回调

<head> 

<script> 
function utmx_section(){}function utmx(){} 
(function(){var k='xxx',d=document,l=d.location,c=d.cookie;function f(n){ 
if(c){var i=c.indexOf(n+'=');if(i>-1){var j=c.indexOf(';',i);return escape(c.substring(i+n. 
length+1,j<0?c.length:j))}}}var x=f('__utmx'),xx=f('__utmxx'),h=l.hash; 
d.write('<sc'+'ript src="'+ 
'http'+(l.protocol=='https:'?'s://ssl':'://www')+'.google-analytics.com' 
+'/siteopt.js?v=1&utmxkey='+k+'&utmx='+(x?x:'')+'&utmxx='+(xx?xx:'')+'&utmxtime=' 
+new Date().valueOf()+(h?'&utmxhash='+escape(h.substr(1)):'')+ 
'" type="text/javascript" charset="utf-8"></sc'+'ript>')})(); 
</script><script>utmx("url",'A/B');</script> 

<script type="text/javascript"> 
    var _gaq = _gaq || []; 
    _gaq.push(['gwo._setAccount', 'UA-xxxxxx-x']); 
    _gaq.push(['gwo._trackPageview', '/xxxxxxxx/test']); 
    (function() { 
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google- analytics.com/ga.js'; 
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
    })(); 
</script> 

<script> 
    window.location = 'MY REDIRECT URL'; 
</script> 
</head> 

我遇到的问题是,我需要保证GWO & GATC代码被执行之前我window.location的调用。我可以做setTimeout,但不提供保证,并增加了额外的加载时间。

关于如何做到这一点的任何想法?

回答

26

我相信我找到了解决方案。事实证明,你可以将函数推到_gaq。然后,_gaq会按顺序执行,以确保在我的重定向之前处理GA内容。

var _gaq = _gaq || []; 
    _gaq.push(['gwo._setAccount', 'UA-xxxxxx-x']); 
    _gaq.push(['gwo._trackPageview', '/xxxxxxxx/test']); 

    _gaq.push(function(){ 
    window.location = 'MY REDIRECT URL'; 
    }); 

http://code.google.com/apis/analytics/docs/tracking/asyncUsageGuide.html#PushingFunctions

+9

这个工程和有道理的,但出于某种原因,[官方建议](http://www.google.com/support/analytics/bin/answer.py?answer=55527)会在事件推送后的几秒内使用'setTimeout'重定向GA队列。 – lucasrizoli 2011-06-03 17:18:40

+2

@lucasrizoli和所有我认为,该功能将被称为一旦像素的请求已由GA代码,但不是在它返回后。也许这就是Google建议延迟重定向的原因,但我不知道是否等待请求返回的重要性。 – 2011-09-27 15:20:37

+8

从队列中按顺序处理时,没有任何说前面的指令将在下一个指令被触发之前完成处理=>仍然需要超时。 但是Google正在收听这样的要求,请继续关注ga.js更新日志http://code.google.com/intl/fr/apis/analytics/community/gajs_changelog.html – 2012-03-29 14:30:54

6

的_gaq.push并没有为我工作...

我用已知的setTimeout的解决方案:

$('.link-site').click(function(e){ 
    e.preventDefault(); 
    _gaq.push(['_trackPageview', '/btn-link-site']); 
    window.setTimeout(function(){ 
     window.location=$('.link-site').attr('href'); 
    },300); 
}); 
+4

这比接受的解决方案更好,因为命令推送到异步队列发生,非常异步:)这可能不会100%的时间,但它更有可能成功,而不是暂停。 – dana 2012-08-14 04:25:18

+1

这是一个黑客,而不是一个适当的解决方案。没有保证该事件将在重定向之前执行。 – 2013-06-28 10:43:09

相关问题