Domanda

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


Google Analytics imposta 4 biscotti che verranno inviati a tutte le richieste a quel dominio (e OFSET suoi sottodomini). Da quello che posso dire nessun server in realtà li utilizza direttamente ; vengono inviati solo con __utm.gif come parametro di query.

Ora, ovviamente Google Analytics legge, scrive e agisce sulla loro valori e avranno bisogno di essere a disposizione lo script di monitoraggio GA.

Quindi, cosa che mi chiedo è se è possibile:

  • riscrivere le cookie __utm* a memoria locale dopo ga.js di loro ha scritto
  • eliminarli dopo ga.js ha eseguito
  • riscrivere i cookie dal retro storage locale a forma di cookie a destra prima di loro ga.js
  • legge
  • ricominciare

In alternativa, scimmia cerotto ga.js utilizzare storage locale prima che inizi il cookie di lettura / scrittura parte.

Ovviamente se stiamo andando così fuori il modo per rimuovere i cookie __utm* ci vorrà utilizzare anche la variante asincrona di Analytics.

Sto indovinando voto verso il basso è stato perché non ho chiesto una domanda. DOH!

Le mie domande sono:
Può essere fatto come descritto sopra?
Se sì, perché non è già stato fatto?


Ho un modello di esempio di default HTML/CSS/JS che passa YSlow, Page Speed, e Audit di Chrome con punteggi quasi perfette. Sto davvero cercando un modo per spremere quelli rimasti cookie di byte da Google Analytics nei browser che supportano la memorizzazione locale.

È stato utile?

Soluzione

Utilizzare questa:

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

In primo luogo, verificare se localStorage è supportato. Se è supportato allora l'opzione 'storage': 'none' disabilita i cookie. Ora siamo in grado di impostare il clientId da localStorage. Se è vuoto, Google Analytics genererà uno nuovo per noi. Salviamo il clientid nuova (o esistente) in localStorage dopo il caricamento del tracker.

Se localStorage non è supportato, mi basta usare il metodo di analisi regolare. Dopo l'inizializzazione mando una pagina visualizzata tramite ga('send', 'pageView').

Inoltre, controllare questo Plunk: http://plnkr.co/MwH6xwGK00u3CFOTzepK

Altri suggerimenti

Alcuni esperimenti in Chrome mostra che potrebbe essere possibile utilizzare getter e setter per cerotto document.cookie per questo, qualcosa di simile a:

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 (o qualsiasi altro Javascript) potrebbe funzionare e biscotti di accesso come normale, solo che non si sarebbe mai passata al server.

Ovviamente questo funziona solo in alcuni browser. I browser in cui non abbia lavoro dovrà ricadere cookie normali.

Ci sono alcune idee correlate a questa domanda: E 'possibile per document.cookie finto in JavaScript?

Si può essere fatto. Basta chiedere la __utm.gif con i parametri. Il resto dei dati è solo utilizzato per tenere traccia della fonte, ora di inizio della sessione e / o visite precedenti.

È possibile trasferire facilmente i biscotti in entrambe le direzioni, in modo che il primo approccio dovrebbe funzionare bene.

Se il secondo approccio funziona ... non è sicuro. Non conosco il codice abbastanza buono ga.js stimare wheter che sarebbe o non sarebbe facilmente possibile.

C'è anche una terza opzione, eseguire la propria versione di ga.js. Non è necessario utilizzare la versione di Google.

Può essere fatto come descritto sopra?

Perché non è stato fatto?

  1. i cookie sono piccoli, non è che molto beneficio se si utilizzano i domini senza cookie per tutti i tuoi contenuti statici
  2. è meno conveniente dal momento che un sacco di browser non supportano ancora
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top