Question

UPDATE http://jsfiddle.net/musicisair/rsKtp/embedded/result/


Google Analytics définit 4 les cookies qui seront envoyés à toutes les demandes à ce domaine (et Ofset ses sous-domaines). D'après ce que je peux dire aucun serveur les utilise en fait directement ; ils sont envoyés uniquement avec __utm.gif comme param de requête.

Maintenant, il est évident lit Google Analytics, écrit et agit sur leurs valeurs et ils devront être disponibles pour le script de suivi GA.

Alors, ce que je me demande est s'il est possible de:

  • réécrire les cookies __utm* sur le stockage local après ga.js leur a écrit
  • les supprimer après ga.js a couru
  • récrire les cookies de retour de stockage local sous forme de biscuits juste avant ga.js les lit
  • recommencer

Ou, Patch singe ga.js à utiliser le stockage local avant qu'il ne commence le cookie de lecture / écriture partie.

Il est évident que si nous allons si loin de la façon de supprimer les cookies de __utm* nous voudrons aussi utiliser la variante Async de Google Analytics.

Je devine que le vote était bas parce que je ne l'ai pas poser une question. DOH!

Mes questions sont les suivantes:
Peut-il être fait comme décrit ci-dessus?
Si oui, pourquoi ne l'a pas été fait?


J'ai un modèle de HTML/CSS/JS par défaut boilerplate qui passe YSlow, PageSpeed, et la vérification de Chrome avec des scores presque parfait. Je suis vraiment un moyen de presser les cookies restants octets de Google Analytics dans les navigateurs qui prennent en charge le stockage local.

Était-ce utile?

La solution

Utilisez ceci:

(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');

Tout d'abord, je vérifie si localStorage est pris en charge. Si elle est prise en charge alors l'option 'storage': 'none' désactive les cookies. Maintenant, nous pouvons régler le clientId de localStorage. Si elle est vide, Google Analytics généreront un nouveau pour nous. Nous sauvegardons le nouveau (ou existant) clientid dans localStorage après le chargement tracker.

Si localStorage est pas pris en charge, je viens d'utiliser la méthode d'analyse régulière. Après l'initialisation j'envoyer un pageView via ga('send', 'pageView').

En outre, consultez cette Plunk: http://plnkr.co/MwH6xwGK00u3CFOTzepK

Autres conseils

Quelques essais en chrome montre qu'il peut être possible d'utiliser des accesseurs de correctif document.cookie pour cela, quelque chose comme:

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 (ou tout autre javascript) pourrait fonctionner et les cookies d'accès comme d'habitude, ils ne seraient jamais être transmis au serveur.

Il est évident que cela ne fonctionnera que dans certains navigateurs. Browsers où il ne fonctionne pas devra retomber aux cookies normaux.

Il y a quelques idées liées à cette question: Est-il possible à document.cookie maquette en JavaScript?

Oui il peut être fait. Il vous suffit de demander au __utm.gif avec les paramètres. Le reste des données est juste utilisé pour garder une trace de la source, l'heure de début de session et / ou des visites précédentes.

Vous pouvez facilement transférer les biscuits dans les deux sens, de sorte que votre première approche devrait fonctionner correctement.

Si votre deuxième approche fonctionne ... pas sûr. Je ne sais pas le code ga.js assez de bon pour estimer wheter qui serait ou ne serait pas facilement possible.

Il y a aussi une troisième option, exécutez votre propre version de ga.js. Vous n'êtes pas obligé d'utiliser la version Google.

Peut-on faire comme décrit ci-dessus? Oui

Pourquoi pas été fait?

  1. les cookies sont de petits, il n'y a pas beaucoup d'avantages si vous utilisez des domaines pour cookieless tout votre contenu statique
  2. il est moins pratique car beaucoup de navigateurs ne supportent pas encore
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top