将Google Analytics(分析cookie)转换为本地/会话存储
-
12-10-2019 - |
题
更新 http://jsfiddle.net/musicisair/rsktp/embedded/result/
Google Analytics(分析)设置了4个cookie,这些cookie将发送到所有请求到该域(并占用其子域)。从我可以告诉没有的服务器实际上使用它们 直接地;他们只是与 __utm.gif
作为查询参数。
现在,显然,Google Analytics(Google Analytic)读取,写作和行动其价值,并且需要用于GA跟踪脚本。
因此,我想知道是否有可能:
- 重写
__utm*
饼干到本地存储之后ga.js
已经写了他们 - 之后删除它们
ga.js
已经运行了 - 在此之前将cookie从本地存储回到cookie形式之前
ga.js
读它们 - 重来
或者, 猴子补丁 ga.js
在本地存储开始之前,请使用cookie读取/写入部分。
显然,如果我们走这么远,可以删除 __utm*
Cookie我们还需要使用分析的异步变体。
我猜想下来的投票是因为我没有问一个问题。啊!
我的问题是:
可以如上所述完成吗?
如果是这样,为什么还没有完成?
我有默认 HTML/CSS/JS
通过YSLOW,PAGESPEED和CHROME的审计,取得完美分数的样板模板。我真的在寻找一种方法来挤压有关支持本地存储的浏览器中Google Analytics(分析)剩余的cookie字节。
解决方案
用这个:
(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设置客户端。如果是空的,Google Analytics(分析)将为我们生成新的。在跟踪器加载后,我们将新的(或现有)客户端保存在LocalStorage中。
如果 localStorage
不支持,我只使用常规分析方法。初始化后,我通过 ga('send', 'pageView')
.
另外,请查看此plunk: http://plnkr.co/mwh6xwgk00u3cfotzepk
其他提示
Chrome中的一些实验表明,可能可以使用Getters和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,它们永远不会传递给服务器。
显然,这只会在某些浏览器中起作用。它不起作用的浏览器将不得不回到普通的饼干中。
这个问题有一些相关的想法: 是否可以在JavaScript中模拟Document.Cookie?
是的,可以做到。您只需要要求 __utm.gif
与参数。其余数据仅用于跟踪源,会话开始时间和/或以前的访问。
您可以双向转移cookie,因此您的第一种方法应该正常。
如果您的第二种方法有效...不确定。我不知道 ga.js
编码足以估计将不容易或不可能进行的WHETER。
还有第三个选项,运行自己的版本 ga.js
. 。您无需使用Google版本。
可以如上所述完成吗?是的
为什么没有完成?
- cookie很小,如果您对所有静态内容使用无烹饪域,没有那么多好处
- 它不太方便,因为很多浏览器尚不支持