我们已经实现了GA的简单实现,并且已经有一段时间了,我们使用的唯一其他方法是setVar和setSessionTimeout。有没有办法我们可以切换到GA的跨域跟踪配置(某些链接通过_link方法连接),而不会丢失客户端系统上的现有跟踪数据?
我已经进行了大量测试,解决的问题越多,出现的问题就越多。简而言之:
预先实施,客户有这些cookie:__ utm(a,b,c,z,v)。第一步是更改代码并添加_setAllowLinker和_setAllowHash方法,但这会引发TypeError。我发现可以通过在调用pageTracker方法之前删除__utmv cookie,然后再次调用_setVar来避免这种情况。
新代码似乎工作正常而不会抛出错误:
document.cookie = '__utmv=; expires=Tue, 22 Jun 2010 11:57:00 GMT;'+
' path=/; domain=XXXXXXX';
var pageTracker=_gat._getTracker(UA-XXXXXXXX);
pageTracker._setAllowLinker(true);
pageTracker._setAllowHash(false);
pageTracker._setSessionTimeout(XXXXX);
pageTracker._setVar(XXXXX);
pageTracker._trackPageview();
现在更新cookie不使用哈希值,因此现在可以跨域使用它们的值,但问题是__utm cookie中的值已使用新值刷新,这意味着我们丢失了用户历史记录(新的访问会爆炸)。
例如,__ utma:
如果无法在不丢失用户历史记录的情况下切换到跨域GA配置,是否有办法在链接上伪造它,这将点击进入下一个域。也就是说,从cookie构建链接URL并用1?
替换所有hashvalue前缀谢谢!
答案 0 :(得分:0)
不幸的是,使用ga.js API似乎没有正确的方法。我已经解决了这个问题:
var pageTracker = _gat._getTracker("UA-123456-7");
if (getCookie('__utma') && getCookie('__utma').substr(0, 2) == '1.') {
// hash value safely removed, flick GA API switch
pageTracker._setAllowHash(false);
}
pageTracker._trackPageview();
if (getCookie('__utmc') != '1') {
// remove hash values from all GA cookies
eraseCookieHash();
}
在eraseCookieHash
函数中,手动更新每个Cookie,使用http://code.google.com/apis/analytics/docs/concepts/gaConceptsCookies.html处的指南将哈希值替换为1,以确定过期值。