Преобразование файлов cookie Google Analytics в локальное/сеансовое хранилище.
-
12-10-2019 - |
Вопрос
ОБНОВЛЯТЬ http://jsfiddle.net/musicisair/rsKtp/embedded/result/
Google Analytics устанавливает 4 файла cookie, которые будут отправляться со всеми запросами в этот домен (и компенсировать его поддомены).Насколько я могу судить, ни один сервер на самом деле их не использует. напрямую;они отправляются только с __utm.gif
в качестве параметра запроса.
Теперь, очевидно, Google Analytics читает, записывает и действует на основе своих значений, и они должны быть доступны для сценария отслеживания GA.
Итак, мне интересно, можно ли:
- переписать
__utm*
файлы cookie в локальное хранилище послеga.js
написал их - удалите их после
ga.js
побежал - перезапишите файлы cookie ИЗ локального хранилища обратно в форму файлов cookie прямо перед
ga.js
читает их - начать сначала
Или, обезьяна патч ga.js
использовать локальное хранилище до того, как начнется часть чтения/записи файлов cookie.
Очевидно, что если мы зайдём так далеко, чтобы удалить __utm*
cookie, мы также захотим использовать асинхронный вариант Analytics.
Я предполагаю, что голосование против произошло потому, что я не задал вопрос.ДОХ!
Мои вопросы:
Можно ли сделать так, как описано выше?
Если да, то почему этого не было сделано?
у меня есть значение по умолчанию HTML/CSS/JS
шаблонный шаблон, который проходит YSlow, PageSpeed и Chrome Audit с почти идеальными оценками.Я действительно ищу способ сжать оставшиеся байты cookie из Google Analytics в браузерах, поддерживающих локальное хранилище.
Решение
Использовать это:
(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.Теперь мы можем установить clientId из localStorage.Если он пуст, Google Analytics сгенерирует для нас новый.Мы сохраняем новый (или существующий) clientid в localStorage после загрузки трекера.
Если localStorage
не поддерживается, я просто использую обычный метод аналитики.После инициализации я отправляю pageView через ga('send', 'pageView')
.
Также обратите внимание на этот план: http://plnkr.co/MwH6xwGK00u3CFOTzepK
Другие советы
Некоторые эксперименты в Chrome показывают, что для исправления можно использовать геттеры и сеттеры. 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.
В этом вопросе есть некоторые связанные идеи: Можно ли высмеять document.cookie в JavaScript?
Да, это может быть сделано.Вам нужно только запросить __utm.gif
с параметрами.Остальные данные используются только для отслеживания источника, времени начала сеанса и/или предыдущих посещений.
Вы можете легко передавать файлы cookie в обе стороны, поэтому ваш первый подход должен работать нормально.
Если ваш второй подход сработает...не уверен.я не знаю ga.js
код достаточно хорош, чтобы оценить, будет ли это легко или невозможно.
Есть еще третий вариант — запустить свою версию ga.js
.Вам не обязательно использовать версию Google.
Можно ли сделать так, как описано выше?Да
Почему это не было сделано?
- файлы cookie маленькие, и нет особой пользы, если вы используете домены без файлов cookie для всего своего статического контента.
- это менее удобно, поскольку многие браузеры его еще не поддерживают.