更新 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版本。

可以如上所述完成吗?是的

为什么没有完成?

  1. cookie很小,如果您对所有静态内容使用无烹饪域,没有那么多好处
  2. 它不太方便,因为很多浏览器尚不支持
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top