16

UPDATE http://jsfiddle.net/musicisair/rsKtp/embedded/result/转换谷歌分析的Cookie到本地/会话存储


谷歌分析设置要与所有的请求到该域发送4块饼干(和OFSET及其子域)。从我可以告诉没有服务器实际上使用它们直接;它们仅以__utm.gif作为查询参数发送。

现在,很明显,Google Analytics(分析)会读取,写入和操作其值,并且需要将它们提供给GA跟踪脚本。

所以,我想知道是,如果它是可能的:

  • 改写__utm*饼干到本地存储后ga.js写他们
  • 删除后ga.js已运行
  • 改写饼干从本地存储返回至ga.js之前的Cookie形式
  • 重新开始

猴子补丁ga.js在它开始cookie读取/写入部分之前使用本地存储。

显然,如果我们要去掉__utm* Cookie,我们还需要使用Analytics的异步变体。

我猜的是反对票是因为我没有提出问题。 DOH!

我的问题是:
可以如上所述完成吗?
如果是这样,为什么它没有完成?


我有通行证的YSlow,的PageSpeed默认HTML/CSS/JS样板模板,以及Chrome和近乎完美的分数审计。我真的正在寻找一种方法来在支持本地存储的浏览器中从谷歌分析中榨取剩余的Cookie字节。

+1

+1了很好的描述情况 – Wolph 2010-12-27 14:47:12

+0

@WoLpH同意... – Webnet 2010-12-27 16:31:31

回答

16

使用此:

(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会为我们生成一个新的。在追踪器加载后,我们将新的(或现有的)客户端保存在localStorage中。如果不支持localStorage,我只是使用常规分析方法。初始化后,我通过ga('send', 'pageView')发送pageView。

此外,检查出这个普拉克:http://plnkr.co/MwH6xwGK00u3CFOTzepK

0

是的,它可以做到。您只需要使用参数请求__utm.gif。其余数据仅用于跟踪来源,会话开始时间和/或以前的访问。

您可以轻松地以两种方式传输Cookie,因此您的第一种方法应该可以正常工作。

如果您的第二种方法有效......不确定。我不知道ga.js的代码足够好,可以估计这个问题是否可行。

还有第三个选项,运行您自己的版本ga.js。您不需要使用Google版本。

可以如上所述完成吗?

为什么没有完成?

  1. 饼干都很小,也没有那么多的好处,如果你用你的所有静态内容
  2. 它不太方便,因为很多浏览器不支持它尚未
cookie的域
2

铬一些实验表明,它可能使用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?