如何判断百度统计代码/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);

 

This article is posted by on , link is .

Leave a reply