Асинхронная Google Analytics не входит в IE - PullRequest
0 голосов
/ 24 июня 2010

Код, который я использую, отслеживает посещения Chrome, Safari, Firefox, Opera Mini, но не IE. Я считаю, что проблема заключается в порядке или порядке загрузки, области действия или, возможно, размещении кода. В настоящее время я использую следующее:

По моему example.html:

<script type="text/javascript" src="http://www.google-analytics.com/ga.js"></script>
<script type="text/javascript" src="example.js"></script>

По моему example.js:

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-########-1']);
_gaq.push(['_trackPageview']);

Где номера UA были изменены, чтобы защитить невинных:).

Первый вариант:
- Удалите ga.js из файла html
- Добавьте код внедрения сценария в файл example.js под вызовами _gaq.push:

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

Кто-нибудь имел успех с размещением кода отслеживания в файле javascript? Или мне нужно переместить весь код отслеживания в файл html, используя фрагмент от Google.

Ответы [ 2 ]

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

Независимо от того, вызываете ли вы ga.js с помощью простого тега сценария или с помощью выражения функции, не имеет большого значения, по крайней мере, в отношении описанной проблемы.Однако рекомендуется использовать выражение функции, чтобы не блокировать загрузку остальной части страницы во время загрузки ga.js.

Почему IE (в частности IE 7 и IE 8) не регистрируют ваши посещениякак вы и предполагали, делать с порядком выполнения.

Эта функция называется push, так что вместо _gaq можно использовать массив до полной загрузки Analytics.Во время загрузки Analytics команды будут помещены в очередь в массив.Когда Analytics заканчивает загрузку, она заменяет массив объектом _gaq и выполняет все команды в очереди.Последующие вызовы _gaq.push разрешают эту функцию, которая выполняет команды по мере их нажатия.

См. http://code.google.com/intl/de-DE/apis/analytics/docs/gaJS/gaJSApi_gaq.html#_gaq.push

Так что согласно документации не должно иметь значения, заполняете ли высначала массив и затем загрузите и выполните ga.js, либо сначала загрузите и выполните ga.js, а затем запустите методы отслеживания.

И действительно, во всех современных браузерах это не имеет значения.Но IE 7/8 ведет себя по-другому.Если метод push был заменен, вызов его для выполнения методов отслеживания, таких как trackPageview, ничего не делает в IE 7/8.

Итак, чтобы ответить на ваш вопрос:

Сначала заполните массив (или загрузите example.js), а затем загрузите ga.js, предпочтительно с использованием выражения функции.

Это работает:

<script type="text/javascript" src="example.js"></script>
<script type="text/javascript" src="http://www.google-analytics.com/ga.js"></script>

следующим образом:

<script>
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-########-1']);
_gaq.push(['_trackPageview']);

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

как это:

<script>
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-########-1']);
_gaq.push(['_trackPageview']);
</script>

<script type="text/javascript" src="http://www.google-analytics.com/ga.js"></script>

или это:

<script type="text/javascript" src="example.js"></script>

<script>
(function() {
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
0 голосов
/ 24 июня 2010

У нас была похожая проблема, наша проблема заключалась в том, что у нас был домен с двумя буквами.Как только вы установите _gaq.push (['_setDomainName', 'xx.com']);все было решено и работало нормально.

...