I have a simple page that I need to execute some GWO & GATC js and then redirect to another url.
<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>
The problem I'm having is that I need to guarantee that the GWO & GATC code is executed BEFORE my window.location is called. I could do setTimeout, but that offers no guarantees and adds additional load time.
Any ideas on how I can do this?
I believe I've found the solution. It turns out, you can push functions to _gaq. The _gaq is then executed sequentially ensuring the GA stuff is taken care of before getting to my redirect.
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