更新 http://jsfiddle.net/musicisair/rsKtp/embedded/result/
Google Analytics设置了4个cookie,这些cookie将与所有请求一起发送到该域(以及它的子域)。据我所知,实际上没有服务器直接使用;它们只与__utm.gif
一起作为查询参数发送。
现在,很明显,Google Analytics读取、写入和操作它们的值,它们将需要可用于GA跟踪脚本。
所以,我想知道是否有可能:
ga.js
写入__utm*
cookie之后将其重写到本地存储中或者,在ga.js
开始读/写cookie部分之前,猴子为cookie打补丁以使用本地存储。
显然,如果我们在删除__utm*
cookies方面走得太远,我们也会想要使用分析的异步变体。
我猜反对票是因为我没问问题。多!
我的问题是:
可以像上面描述的那样做吗?
如果这样做了,为什么还没有做呢?
我有一个默认的HTML/CSS/JS
样板模板,它以近乎完美的分数通过了YSlow,PageSpeed和Chrome的审计。我真的在寻找一种方法,在支持本地存储的浏览器中从Google Analytics中挤出那些剩余的cookie字节。
发布于 2013-10-06 16:45:48
使用以下命令:
(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'
选项将禁用cookies。现在我们可以从localStorage设置clientId了。如果它是空的,谷歌分析将为我们生成一个新的。在跟踪器加载后,我们将新的(或现有的)客户端in保存在localStorage中。
如果不支持localStorage
,我只使用常规的分析方法。初始化之后,我通过ga('send', 'pageView')
发送了一个pageView。
发布于 2012-05-16 18:03:47
在chrome中的一些实验表明,可以使用getters和setters来修补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?
发布于 2010-12-27 22:46:24
是的,这是可以做到的。您只需请求带有参数的__utm.gif
。其余数据仅用于跟踪源、会话开始时间和/或之前的访问。
您可以轻松地以两种方式传输cookie,因此您的第一种方法应该可以很好地工作。
如果你的第二种方法行得通...不确定。我不太了解ga.js
代码,无法估计这是不是很容易实现。
还有第三种选择,运行您自己的ga.js
版本。您不需要使用Google版本。
可以像上面描述的那样做吗?是
为什么还没有做呢?
https://stackoverflow.com/questions/4502128
复制相似问题