没有使用任何其他JS框架(dojo,jquery等),如何动态加载Google Analytic的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
答案 0 :(得分:6)
您可以使用HTML5 Boilerplate中的此片段。
<!-- Google Analytics: change UA-XXXXX-X to be your site's 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>
答案 1 :(得分:1)
尝试使用Google提供的确切JavaScript代码,然后根据UI框架中的构造有条件地显示该部分代码。您没有说明它运行的平台,如果是ASP.NET,您可以将代码放在PlaceHolder或UserControl中,然后根据配置文件设置将Visible设置为true或false(如果应该包含脚本)。我在多个站点上使用此方法来阻止Analytics脚本包含在预生产环境中。
答案 2 :(得分:0)
答案 3 :(得分:0)
我实际上只是将一些东西组合在一起......使用jquery。诀窍是在脚本标记中添加一个加载事件,其中包含跟踪代码。
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);
我正在努力解决的问题是...这是谷歌允许的。
答案 4 :(得分:0)
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上测试
抱歉,如果我这次聚会有点迟了。