Как динамически загружать JavaScript в Google Analytics?
Без, используя любые другие JS-фреймворки (dojo, jquery и т.д.), , как бы я динамически загружал Google Analytics javascript для использования на веб-странице для веб-отслеживания?
Типичным для динамической загрузки JS типичным является следующее:
var gaJs = document.createElement("script");
gaJs.type = "text/javascript";
gaJs.src = "http://www.google-analytics.com/ga.js";
document.body.appendChild(gaJs);
var pageTracker = _gat._getTracker("UA-XXXXXXXXX");
pageTracker._initData();
pageTracker._trackPageview();
Но это не работает.
Файл ga.js не загружается вовремя для _gat._getTracker и _initData/TrackPageview.
Любые идеи относительно правильной динамической загрузки ga.js.
ОБНОВЛЕНИЕ. Похоже, кто-то попытался решить эту проблему по следующей ссылке. Тем не менее, он используется со старым кодом Urchin, а не с Google Analytics.
Любые идеи о том, как заставить это работать с ga.js вместо urchin.js?
http://20y.hu/20070805/loading-google-analytics-dynamically-on-document-load.html
Ответы
Ответ 1
Вы можете использовать этот фрагмент из HTML5 Boilerplate.
<!-- Google Analytics: change UA-XXXXX-X to be your site ID. -->
<script>
var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
s.parentNode.insertBefore(g,s)}(document,'script'));
</script>
Ответ 2
Попробуйте использовать точный код JavaScript, предоставленный Google, и затем условно отобразите этот раздел кода на основе конструкции в пользовательском интерфейсе. Вы не сказали, на какой платформе это работает, если это ASP.NET, вы можете поместить код в PlaceHolder или UserControl, а затем установить Visible в true или false на основе настройки файла конфигурации, если необходимо включить script. Я использовал этот подход на нескольких сайтах, чтобы предотвратить включение Google Analytics script в предварительные рабочие среды.
Ответ 3
Программирование на стороне сервера было бы проще, я думаю, но я нашел this несколько лет назад. Обратите внимание, что он специально устанавливает его в html head
.
Также проверьте первую ссылку на "Добавление Javascript через Ajax" .
Ответ 4
Я буквально просто положил что-то вместе, что делает это... используя jquery. Хитрость заключается в добавлении события загрузки в тег script с кодом отслеживания в нем.
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
var gaScript = document.createElement('script');
var loaded = false;
gaScript.src = gaJsHost + "google-analytics.com/ga.js";
$(gaScript).load(function(){
loaded = true;
var pageTracker = _gat._getTracker(Consts.google_analytics_uacct);
pageTracker._initData();
pageTracker._trackPageview();
});
document.body.appendChild(gaScript);
// And to make it work in ie7 & 8
gaInterval = setInterval(function() {
if (!loaded && typeof _gat != 'undefined') {
$(gaScript).load();
clearInterval(gaInterval);
}
},50);
Вещь, которую я пытаюсь решить, - это разрешено google.
Ответ 5
function loadGA()
{
if(typeof _gat == 'function') //already loaded
{
//innitGA();
// you may want the above line uncommented..
// I'm presuming that if the _gat object is there
// you wouldn't want to.
return;
}
var hostname = 'google-analytics.com';
var protocol = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
js = document.createElement('script');
js.setAttribute('type', 'text/javascript');
js.setAttribute('src', protocol+hostname+'/ga.js');
document.body.appendChild(js);
//2 methods to detect the load of ga.js
//some browsers use both, however
loaded = false; // so use a boolean
js.onreadystatechange = function () {
if (js.readyState == 'loaded')
{
if(!loaded)
{
innitGA();
}
loaded = true;
}
};
js.onload = function ()
{
if(!loaded)
{
innitGA();
}
loaded = true;
};
}
function innitGA()
{
//var pageTracker = _gat._getTracker('GA_ACCOUNT/PROFILE_ID');
//pageTracker._initData();
//pageTracker._trackPageview();
alert('oh hai I can watch plz?');
}
просто вызовите loadGA()... проверенный на IE6/7/8, FF3, Chrome и Opera
Извините, если я немного опоздаю на эту вечеринку.