因项目需要,需要在项目中添加百度统计或友盟统计;项目是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和数据请求的监测;后期还会监测页面事件,待续。。。。