vue单页面记录用户访问次数和访问时长——客户端数据收集

1,032 阅读1分钟

记录网站的访问次数

在App.vue的onMounted中添加代码记录网站的进入, 缺点是刷新页面也算上了。

记录网站页面的离开和进入

在vue-router的全局前置守卫beforeEach中添加代码可以记录页面的离开和进入。

浏览器切换窗口到其它网站了

监听页面可见性改变事件visibilitychange

代码展示

// router/index.js 全局前置守卫监听页面的离开和进入
 router.beforeEach((to, from, next) => {
        if(to.path) {
            to.meta.enterTime = new Date();
            console.log(to.path, "进入时间", to.meta.enterTime)
        }
        if(from.path) {
            console.log(from.path, "离开时间", new Date())
            if(from.meta.enterTime) {
                console.log(from.path, "停留时间", (new Date().getTime() - from.meta.enterTime.getTime())/1000)
            }
        }
        ...
})

// App.vue, 监听页面可见性
onMounted(() => {
  console.log("进入网站")
  document.addEventListener('visibilitychange', hanldeVisible)
})
onBeforeMount(() => {
  console.log("离开网站", route.path)
  document.removeEventListener('visibilitychange', hanldeVisible)
})

const hanldeVisible = (e) => {
  switch (e.target.visibilityState) {
    case 'visible': 
      console.log('网站窗口visible', route.path)
      to.meta.enterTime = new Date();
      console.log(to.path, "进入时间", to.meta.enterTime)
    break;
    case 'hidden':
      console.log('网站窗口hidden', route.path)
      if(route.meta.enterTime) {
        console.log(route.path, "停留时间", (new Date().getTime() - route.meta.enterTime.getTime())/1000)
      }
      break;
    default:
      break;
  }
}

执行结果:

企业微信截图_aa869272-7317-43d5-aa83-f893eb336ac3.png