16

更新 http://jsfiddle.net/musicisair/rsKtp/embedded/result/


Google アナリティクスは、そのドメインへのすべてのリクエストとともに送信される 4 つの Cookie を設定します(およびそのサブドメインをオフセットします)。私が知る限り、実際にそれらを直接使用するサーバーはありません。__utm.gifこれらはクエリ パラメータとしてのみ送信されます。

明らかに、Google アナリティクスは値の読み取り、書き込み、および動作を行い、GA トラッキング スクリプトで使用できるようにする必要があります。

だから、私が疑問に思っているのは、次のことが可能かどうかです。

  • Cookie を書き込んだ__utm*後、Cookie をローカル ストレージに書き換えます。ga.js
  • ga.js実行後にそれらを削除します
  • ga.jsそれらを読み取る直前に、ローカルストレージからのCookieをCookie形式に書き換えます
  • 最初からやり直す

または、Cookie の読み取り/書き込み部分を開始する前に、ローカル ストレージを使用するようにモンキー パッチを適用します。ga.js

明らかに、Cookie を削除する方法を大幅に変更する場合は__utm*、Analytics の Async バリアントも使用する必要があります。

反対票を投じたのは、質問をしなかったためだと思います。ドー!

私の質問は次
のとおりです。上記のように実行できますか?
もしそうなら、なぜそれが行われていないのですか?


HTML/CSS/JSYSlow、PageSpeed、および Chrome の監査をほぼ完璧なスコアで通過するデフォルトのボイラープレート テンプレートがあります。ローカル ストレージをサポートするブラウザで、Google Analytics から残りの Cookie バイトを絞り込む方法を本当に探しています。

4

3 に答える 3

20

これを使って:

(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 アナリティクスが新しいものを生成します。トラッカーが読み込まれた後、新しい (または既存の) clientid を localStorage に保存します。

サポートされていない場合localStorageは、通常の分析方法を使用します。初期化後、 経由で pageView を送信しますga('send', 'pageView')

また、このプランクをチェックしてください: http://plnkr.co/MwH6xwGK00u3CFOTzepK

于 2013-10-06T08:45:47.810 に答える
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 に戻す必要があります。

この質問には関連するアイデアがいくつかあります: JavaScript で document.cookie をモックすることは可能ですか?

于 2012-05-16T10:03:47.323 に答える
0

はい、できます。__utm.gifパラメータを指定して をリクエストするだけです。残りのデータは、ソース、セッションの開始時間、および/または以前の訪問を追跡するためにのみ使用されます。

両方の方法で Cookie を簡単に転送できるため、最初の方法はうまく機能するはずです。

2番目のアプローチが機能するかどうか...わかりません。ga.jsそれが簡単に可能かどうかを見積もるのに十分なほど良いコードを私は知りません。

独自のバージョンの を実行する 3 番目のオプションもありますga.js。Google バージョンを使用する必要はありません。

上記のようにできますか? はい

なぜそれが行われていないのですか?

  1. Cookie は小さいため、すべての静的コンテンツに Cookie を使用しないドメインを使用しても、それほどメリットはありません。
  2. 多くのブラウザがまだサポートしていないため、あまり便利ではありません
于 2010-12-27T14:46:24.190 に答える