zoukankan      html  css  js  c++  java
  • 项目中使用百度统计和友盟统计

    因项目需要,需要在项目中添加百度统计或友盟统计;项目是vue单页应用项目,

    最开始是用的百度统计:

    1、在index页面head里面加入(这个应该也可以不需要,主要第二部动态加入):

    <script>
                var _hmt = _hmt || [];
                (function() {
                    var hm = document.createElement("script");
                    hm.src = "https://hm.baidu.com/hm.js?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
                    hm.id = "baidu_tj";
                    var s = document.getElementsByTagName("script")[0];
                    s.parentNode.insertBefore(hm, s);
                })();
            </script> 

    2、在main.js 中写入router.afterEach(function(to,from){}),路由守卫;

    在守卫中写入百度统计代码:

        //百度统计;
        setTimeout(() => {
            var _hmt = _hmt || [];
            (function() {
                //每次执行前,先移除上次插入的代码
                document.getElementById('baidu_tj') && document.getElementById('baidu_tj').remove();
                var hm = document.createElement("script");
                hm.src = "https://hm.baidu.com/hm.js?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
                hm.id = "baidu_tj"
                var s = document.getElementsByTagName("script")[0];
                s.parentNode.insertBefore(hm, s);
            })();
            // console.log(to.fullPath);
            _hmt.push(['_trackPageview','/#'+to.fullPath]);
            
        }, 0);

    上面这种是动态的加入百度统计代码,因为单页应用的head在首次加载完毕之后,就不会再执行了,内部的具体执行机制我也不是很清楚,希望知道老铁们给我一些指导提示;

    然后在其他的地方,比如请求拦截器的地方:

    _hmt.push(['_trackPageview',config.url]);

    而后换成友盟统计:

    1、在index页面:

    <div style="display: none;">
                <script type="text/javascript" src="https://s4.cnzz.com/z_stat.php?id=XXXXXXXX&web_id=XXXXXXXX"></script>
            </div>
            <script>
                _czc.push(["_setAutoPageview", false]);
            </script>

    搞笑的是上面的一条js引入会生成四个字:“站长统计”,所以用了个div包裹起来并隐藏;

    如果使用_trackPageview改写了已有页面的URL,那么建议您在CNZZ的JS统计代码执行前先调用_setAutoPageview,将该页面的自动PV统计关闭,防止页面的流量被统计双倍。

    2、在main.js 中的路由守卫中:

    if (window._czc) {
              // window._czc.push(["_setAutoPageview", false]);
              let location = window.location;//路由变化
              let contentUrl = "/#" + to.fullPath;//自定义当前url,可带上路由以此区分每个页面
              let refererUrl = location.protocol + "//" + location.host + "/#" + from.fullPath;
              window._czc.push(["_setAutoPageview", false]);
              window._czc.push(["_trackPageview", contentUrl, refererUrl])
            }

    3、在请求的拦截中:

    if (window._czc) {
              // window._czc.push(["_setAutoPageview", false]);
              let location = window.location;//路由变化
              // let contentUrl = location.pathname + location.hash;//自定义当前url,可带上路由以此区分每个页面
              // console.log(config);
              let contentUrl;
              if(config.params){
                let keys = Object.keys(config.params);
                let strArr = [];
                for(var i=0;i<keys.length;i++){
                    strArr.push(keys[i]+"="+config.params[keys[i]]);
                };
                let str = strArr.join("&");
                contentUrl = config.url+"?"+str;
              }else{
                  contentUrl = config.url;
              }
              let refererUrl = location.href;
              window._czc.push(["_setAutoPageview", false]);
              window._czc.push(["_trackPageview", contentUrl, refererUrl])
        }

    以上,目前使用的也都是对pv和数据请求的监测;后期还会监测页面事件,待续。。。。

  • 相关阅读:
    < java.lang >-- StringBuilder字符串缓冲区
    Integer对象
    < java.lang >-- StringBuffer字符串缓冲区
    < java.lang >-- String字符串
    单例设计模式:★★★★★
    线程同步 Lock接口
    POJ 3254 Corn Fields (状压dp)
    Codeforces 583D. Once Again... (LIS变形)
    Light oj 1005
    Codeforces 543D. Road Improvement (树dp + 乘法逆元)
  • 原文地址:https://www.cnblogs.com/wangtaolearning/p/11295258.html
Copyright © 2011-2022 走看看