更新 http://jsfiddle.net/musicisair/rsKtp/embedded/result/
Google Analytics设置4个Cookie,这些Cookie将与该域的所有请求一起发送(并设置其子域)。据我所知,没有服务器实际使用它们直接;它们仅与__utm.gif
一起作为查询参数发送。
现在,显然Google Analytics会对其值进行读取,写入和操作,并且需要提供给GA跟踪脚本。
所以,我想知道的是否有可能:
__utm*
写入ga.js
Cookie重写为本地存储空间
ga.js
运行ga.js
读取之前将cookie从本地存储重写为cookie表单或者, monkey patch ga.js
在开始cookie读/写部分之前使用本地存储。
显然,如果我们想要删除__utm*
Cookie,我们还想要使用Async的Google Analytics变体。
我猜这次投票是因为我没有提出问题。 DOH!
我的问题是:
可以如上所述完成吗?
如果是这样,为什么还没有这样做?
我有一个默认的HTML/CSS/JS
样板模板,可以通过YSlow,PageSpeed和Chrome的审核获得近乎完美的分数。我真的在寻找一种方法,在支持本地存储的浏览器中从Google Analytics中挤出剩余的Cookie字节。
答案 0 :(得分:17)
使用此:
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
if(window.localStorage) {
ga('create', 'UA-98765432-1', 'www.example.com', {
'storage': 'none'
, 'clientId': window.localStorage.getItem('ga_clientId')
});
ga(function(tracker) {
window.localStorage.setItem('ga_clientId', tracker.get('clientId'));
});
}
else {
ga('create', 'UA-98765432-1', 'www.example.com');
}
ga('send', 'pageview');
首先,我检查是否支持localStorage
。如果支持,则'storage': 'none'
选项将禁用cookie。现在我们可以从localStorage设置clientId。如果它为空,Google Analytics会为我们生成一个新的。我们在跟踪器加载后将新的(或现有的)clientid保存在localStorage中。
如果不支持localStorage
,我只使用常规分析方法。初始化后,我通过ga('send', 'pageView')
发送一个pageView。
另外,请查看此插件:http://plnkr.co/MwH6xwGK00u3CFOTzepK
答案 1 :(得分:2)
Chrome中的一些实验表明,可以使用getter和setter来修补document.cookie
,例如:
document.__defineGetter__('cookie', function () {
// Replace this with code to read from localstorage
return "hello";
});
document.__defineSetter__('cookie', function (value) {
// Replace this with code to save to localstorage
console.log(value);
});
ga.js(或任何其他javascript)可以正常运行和访问cookie,它们永远不会传递给服务器。
显然这只适用于某些浏览器。不起作用的浏览器将不得不回归正常的cookie。
这个问题中有一些相关的想法:Is it possible to mock document.cookie in JavaScript?
答案 2 :(得分:0)
是的,可以做到。您只需要使用参数请求__utm.gif
。其余数据仅用于跟踪来源,会话开始时间和/或之前的访问。
您可以轻松地双向传输Cookie,因此您的第一种方法应该可以正常工作。
如果你的第二种方法有效......不确定。我不知道ga.js
代码是否足够好,可以估算哪些代码很容易实现,哪些代码不太容易实现。
还有第三个选项,运行您自己的ga.js
版本。您无需使用Google版本。
可以如上所述完成吗? 是
为什么没有这样做?