Независимо от того, вызываете ли вы 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>