2010-10-07 3 views
1

После прочтения сообщения в блоге мне пришла в голову идея добавить код безопасности для обеспечения полной загрузки объектов Google Analytics до вызова его функций.Как обеспечить загрузку Google Analytics перед вызовом его функций?

код Typicle Google Analytics выходит что-то вроде:

var pageTracker = _gat._getTracker("X-UAXXXXX"); 
pageTracker._trackPageview(); 

и

pageTracker._addItem(bla bla); 
pageTracker._trackTrans(); 

Я думал о двух вариантов удвоения убедиться, что _gat-объект загружается перед использованием:

1) Используйте JQuery.ready для вызова _get-функций. Что-то вроде:

$(document).ready(function() { 
    var pageTracker = _gat._getTracker("X-UAXXXXX"); 
    pageTracker._trackPageview(); 
} 

или

2) Использование JavaScript таймаута

function checkGat() { 

    if(gat_is_ready) { 
     var pageTracker = _gat._getTracker("X-UAXXXXX"); 
     pageTracker._trackPageview(); 
    } else { 
     setTimeout('checkGat()', 1000); 
    } 

} 

checkGat() 

Что является лучшим решением? Зачем? и любые дополнительные комментарии?

ответ

0

Это все лишнее. Просто используйте новый Google Analytics Asynchronous Code; он делает это для вас.

<script type="text/javascript"> 

    var _gaq = _gaq || []; 
    _gaq.push(['_setAccount', 'UA-XXXXX-X']); 
    _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> 

С помощью этого кода вы храните информацию об отслеживании в массиве JavaScript (так называемый _gaq), как в начале страницы, как вы хотите. Затем он выполняет вызов только Google Analytics после загрузки и готовности ga.js. Другими словами, он делает все это для вас, без необходимости писать сложные циклы, и у вас никогда не будет условий гонки, которые приводят к ошибкам JavaScript.

Это имеет дополнительное преимущество быть неблокирующимся и, следовательно, немного быстрее.