Google Analytics из файла: // URL - PullRequest
       20

Google Analytics из файла: // URL

14 голосов
/ 28 августа 2010

У нас есть фреймворк для приложений на основе HTML на основе ajaxy, и мы хотим, чтобы с ним работала аналитика Google.И я считаю, что мы настроили все правильно, чтобы вручную вызывать _trackPageview, где это необходимо.

Однако о вещах, похоже, не сообщается.Теперь либо у меня не работает правильно, либо отслеживание GA из javascript с протоколом file:// на URL молча нарушает некоторую междоменную политику, о которой я не знаю.

Так же работает GA с локальнымHTML через file://?Или что-то не так с моим использованием GA?

Обратите внимание, что используемый нами домен на самом деле не существует.Мы хотим использовать что-то вроде отслеживания мобильных приложений , но из JavaScript, а не из собственной библиотеки.И чтобы сделать это, похоже, вы настроили поддельный домен и сказали трекеру, в каком домене он должен сообщать, как.


В конце моего <head>:

<script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXACCOUNTID-XX']);
  _gaq.push(['_setDomainName', 'myfake.domain.com']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = 'http://www.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>

И в нашей структуре JS мы называем:

_gaq.push(['_trackPageview', '/some/path/here']);

Ответы [ 5 ]

20 голосов
/ 17 ноября 2015

Google теперь поддерживает отключение задачи проверки протокола , установив для нее значение null, позволяя отслеживать аналитику с file:// url:

ga('create', 'UA-XXXXX-Y', 'auto');
ga('set', 'checkProtocolTask', null); // Disable file protocol checking.
ga('set', 'checkStorageTask', null); // Disable cookie storage checking.
ga('set', 'historyImportTask', null); // Disable history checking (requires reading from cookies).
ga('send', 'pageview');
3 голосов
/ 30 августа 2010

ОК, я думаю, что этот вопрос решен.Это преследовало меня в течение нескольких дней.

Согласно Справочному центру Google Analytics ,

Посетители должны включить JavaScript, изображения и файлы cookie в своих браузерах, чтобы Google Analytics могла сообщать о своем посещении.

Вот моя теория: в моих тестах на Mac OS X Snow Leopard документы, запущенные из файла: // не могут устанавливать файлы cookie.Это связано с тем, что файлы cookie являются собственностью HTTP, и когда вы запускаете что-то из файла file: //, вы не используете протокол HTTP.

Поскольку вы не можете устанавливать файлы cookie, ga.js отказываетсяотправьте запрос _utm.gif на серверы Google.Никакие куки не устанавливаются;в Google не отправлено ни одного запроса, поэтому в GA ничего не зарегистрировано.

Решение: используйте среду разработки, в которой вы можете установить свой домен как http://localhost (что-то вроде MAMP, если вы работаете на Mac и нуждаетесь в стеке LAMP)

(Странная сноска: я наблюдал странное поведение, когда куки-файлы GA устанавливались бы как сторонние куки-файлы домена несвязанного импортированного скрипта из стороннего домена не-CDN. Это может быть связано с тем, что сервер отправляетФайлы cookie HTTP с файлом ga.js присоединяются к этому домену, однако это не будет использоваться в качестве бэкдора, поскольку он все равно не отправит попадание _utm.gif на серверы Google).

========

РЕДАКТИРОВАТЬ:

Вы можете попробовать один из различных обходных путей, созданных людьми для отслеживания ГА без файлов cookie.

Вы можете получить некоторый успех от этого инструмента: http://code.google.com/p/google-analytics-js/downloads/list, объяснено здесь: http://remysharp.com/2009/02/27/analytics-for-bookmarklets-injected-scripts/

Вместо всего этого кода GA, вы включите сценарий, а затемвызовите его, используя следующий код:

gaTrack('UA-XXXACCOUNTID-XX', 'myfake.domain.com', '/some/path/here');

Он предназначен для отслеживания букмарклетов / внедренных сценариев, но если я добавлю файл: // type setup, он сможет успешно отправить хит __utm.gif, что означаетДОЛЖЕН успешно отслеживать в GA.

Недостатком является то, что отсутствие файлов cookie означает, что он не сможет точно отслеживать посещения, только данные на уровне просмотра страниц.

2 голосов
/ 12 ноября 2017

Необходимы несколько настроек:

Отключить хранение файлов cookie

Файлы cookie не могут использоваться, так как в действии нет домена, поэтому мы должны предотвратить попытки GA использовать их.Это можно сделать, установив 'storage': 'none' в конфигурации создания ( документация ).

Отключить проверку файлового протокола

По умолчанию GA прерывает работу, если протокол (в нашем случае *)1012 *) не является http или https.Отключите эту проверку, используя соответствующую задачу : ga('set', 'checkProtocolTask', null)

Установить активную страницу вручную

Поскольку домена нет, GA не может найти путь, обозначающий активную страницу.Его можно настроить вручную с помощью функции изменения URL-адреса страницы : ga('set', 'page', 'foobar')

Последующий ga('send', 'pageview') будет отображаться в данных как посещение /foobar.

Отслеживание личности пользователя с помощью localStorage (необязательно)

При отключенных файлах cookie пользователи не отслеживаются при загрузке страницы, поэтому каждое обновление будет запускать обнаружение другого уникального посетителя.Однако мы можем предоставить пользовательские идентификаторы клиентов при создании, установив 'clientId': localStorage.getItem(someKey), который ищет ранее сохраненные идентификаторы клиентов.

Хранение идентификаторов выполняется с помощью

ga(function(tracker) {
  localStorage.setItem(someKey, tracker.get('clientId'));
})

Все вместе

Объединяя все вышеперечисленные шаги, мы получаем что-то вроде следующего:

(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','https://www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-XXXXXXXX-Y', {
    'storage': 'none',
    'clientId': localStorage.getItem('ga:clientId')
});
ga(function(tracker) {
    localStorage.setItem('ga:clientId', tracker.get('clientId'));
});
ga('set', 'checkProtocolTask', null);

ga('set', 'page', 'myPage');
ga('send', 'pageview');
1 голос
/ 23 октября 2010

Завершается сложным отскоком через iframe через механизм передачи сообщений взлома resize.

Локальный файл включает в себя iframe на нашем сервере.Когда мы хотим отследить вызов GA, мы меняем его URL-хэш с необходимой нам информацией #_trackEvent,foo,bar, а затем меняем ширину фрейма.В iframe функция onresize() запускается и позволяет нам отправлять вызовы GA, проверяя хэш.

Как бы я не ненавидел этот хак, он работает безупречно!

0 голосов
/ 13 января 2012

Вместо изменения размера Iframe вы можете использовать событие onHashChange JS.

Единственным недостатком является то, что такой метод работает на IE8 +. (нет IE6, IE7). Он работает в остальных браузерах, включая iOS и Android.

...