基于vue或nuxt.js的单页应用怎么添加统计功能?
[ 2018/12/23, Vue , 3655阅, 0评 ]

普通vue项目中

以CNZZ统计为例(CNZZ统计API),先在index.html中的head标签中加入:

<script>
var _czc = _czc || [];
_czc.push(["_setAutoPageview", false]);
(function() {
    var cnzz_s_tag = document.createElement('script');
    cnzz_s_tag.type = 'text/javascript';
    cnzz_s_tag.async = true;
    cnzz_s_tag.charset = 'utf-8';
    cnzz_s_tag.src = 'CNZZ统计提供的链接';
    var root_s = document.getElementsByTagName('script')[0];
    root_s.parentNode.insertBefore(cnzz_s_tag, root_s);
})();
</script>

然后全局路由钩子中:

router.afterEach(function(to, from){
    // 生产环境才开始统计
    if(_czc && process.env.MY_API_ENV === 'product'){
        var content_url = to.fullPath
        var referer_url = from.fullPath
        _czc.push(['_trackPageview', content_url, referer_url])
    }
})

百度统计用法类似。百度统计API

<script>
var _hmt = _hmt || [];
_hmt.push(['_setAutoPageview', false]);
(function() {
    var hm = document.createElement("script");
    hm.src = "百度统计提供的链接";
    var s = document.getElementsByTagName("script")[0]; 
    s.parentNode.insertBefore(hm, s);
})();
</script>

相应的

router.afterEach(function(to, from){
    // 生产环境才开始统计
    if(_hmt && process.env.MY_API_ENV === 'product'){
        _hmt.push(['_trackPageview', to.fullPath])
    }
})

nuxt.js项目中

nuxt官方提供了“可以定制化 Nuxt.js 默认的应用模板”功能,那么我们可以直接在nuxt项目的根目录创建一个app.html文件,内容大致如下:

<!DOCTYPE html>
<html {{ HTML_ATTRS }}>
  <head>
    {{ HEAD }}
<script>
var _czc = _czc || [];
_czc.push(["_setAutoPageview", false]);
(function() {
    var cnzz_s_tag = document.createElement('script');
    cnzz_s_tag.type = 'text/javascript';
    cnzz_s_tag.async = true;
    cnzz_s_tag.charset = 'utf-8';
    cnzz_s_tag.src = 'CNZZ统计提供的链接';
    var root_s = document.getElementsByTagName('script')[0];
    root_s.parentNode.insertBefore(cnzz_s_tag, root_s);
})();
</script>
  </head>
  <body {{ BODY_ATTRS }}>
    {{ APP }}
  </body>
</html>

然后在 plugins 目录下创建 plugins/ga.js 文件

export default ({ app: { router }, store }) => {
    router.afterEach((to, from) => {
        if(process.env.MY_API_ENV === 'product'){
            try{
                var content_url = to.fullPath
                var referer_url = from.fullPath
                _czc.push(['_trackPageview', content_url, referer_url])
            }catch(e){
                
            }
        }
    })
}

最后,在nuxt.config.js配置如下:

plugins: [
    { src: '~/plugins/ga.js', ssr: false },
],

相关资料

有朋自远方来...评论一下呗O(∩_∩)O