如何判断百度统计代码/google统计代码是否加载完成
前几天做一个项目的时候,某一个页面用到了baidu/google的统计代码来计算PV/UV, 这个页面其实是个中转的页面,很快就会跳转了。
原先的实现方案是直接等待3s,但是,我们肯定希望越快跳转越好了,于是问题就来了,如何判断google/baidu的统计代码加载完成呢?
经过研究,查看文档,发现google有专门的回调函数 hitCallback就可以搞定了, 而百度稍微复杂一些,百度将要加载的图片放到了一个以mini_tangram_log开头的全局变量中,可以在h.js加载完成后,查找这个image,然后设定去onload事件,来检测图片的加载完成,详细的代码如下:
function check_ga() {
// ga is done
}
function check_hm() {
setTimeout(function() {
for(var i in window) {
if(/^mini_tangram_log/.test(i)) {
var t = window[i];
if(t && t.tagName == 'IMG') {
t.onload = function() {
// baidu is done
};
}
break;
}
}
}, 2);
}
function _asyncLoadScript(url, onload) {
var s = document.createElement("script");
s.type = 'text/javascript'; s.async = true; s.src = url; s.onload = onload;
var d = document.getElementsByTagName("script")[0];
d.parentNode.insertBefore(s, d);
}
var _gaq = _gaq || [], _is_ssl= document.location.protocol == 'https:';
_gaq.push(['_setAccount', 'UA-xxxxxx-1']);
_gaq.push(['_trackPageview', {hitCallback : check_ga}]);
_gaq.push(['_trackPageLoadTime']);
_asyncLoadScript((_is_ssl ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js');
_asyncLoadScript((_is_ssl ? 'https://' : 'http://') + 'hm.baidu.com/h.js?yyyyyyyyyyyyyyyyyyyyyyy', check_hm);