vue项目实现埋点操作,记录用户浏览时间

本文介绍如何使用Vue自定义指令实现用户行为追踪,包括点击和浏览两种行为,并详细展示了代码实现过程。

需求分析:需要记录用户浏览页面的行为。
包括:
点击时,记录当前所在页面的地址、标题、元素名称。
浏览页面,记录上个页面的地址,记录当前页的地址、标题、浏览时间。

具体实现

点击事件,我是通过Vue的自定义指令来实现。

废话不多说直接上代码:
1、首先我在我的项目中创建一个directive文件。
在这里插入图片描述
文件中具体代码

import Vue from "vue";
// 自定义埋点指令
Vue.directive("track", {
  //钩子函数,只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置
  /*
   * el:指令所绑定的元素,可以用来直接操作 DOM
   * binding:一个对象,包含以下 property:
   *   name:指令名,不包括 v- 前缀。
   *   value:指令的绑定值,例如:v-my-directive="1 + 1" 中,绑定值为 2。
   *   expression:字符串形式的指令表达式。例如 v-my-directive="1 + 1" 中,表达式为 "1 + 1"。
   *   arg:传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 "foo"。
   *   modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }。
   * vnode:Vue 编译生成的虚拟节点
   */
  bind: (el, binding, ) => {
    
    if (binding.value) {
      //这里参数是根据自己业务可以自己定义
      let params = {
        currentUrl: binding.value.currentUrl,
        actionType: binding.value.actionType,
        title: binding.value.title,
        // preUrl: binding.value.preUrl,
        frontTriggerType: binding.value.triggerType,
        // businessCode: binding.value.businessCode,
        behavior: binding.value.behavior,
        // service: "xxx",
      };
      //如果是浏览类型,直接保存
      if (binding.value.triggerType == "browse") {
        console.log("browse", params);
        //调用后台接口保存数据
        // api.eventTrack.saveEventTrack(params);
      } else if (binding.value.triggerType == "click") {
        //如果是click类型,监听click事件
        el.addEventListener(
          "click",
          () => {
            console.log("click", params);
            //调用后台接口保存数据
            // api.eventTrack.saveEventTrack(params);
          },
          false
        );
      }
    }
  },
});

2、将文件引入main.js。
3、在需要的地方调用指令。

<a-menu-item key="/info/table" v-track="{triggerType:'click', title:'首页',currentUrl: $route.path,behavior:'点击表格按钮'}"> 表格 </a-menu-item>
<a-menu-item key="/info/myEcharts" v-track="{triggerType:'click', title:'首页',currentUrl: $route.path,behavior:'点击myEcharts按钮'}"> myEcharts </a-menu-item>

可以看到输出,操作成功。
在这里插入图片描述

页面浏览事件

通过在router文件中,通过beforeEach钩子函数实现的,

//获取开始时间
let startTime = Date.now();
//定义一个获取用户的函数
const get_userinfo = (to, from, token) => {
//获取当前时间
  let currentTime = Date.now();
  let Brow_history = {
    preUrl: from.path,
    preTitle: from.meta.title,
    currentUrl: to.path,
    currentTitle: to.meta.title,
    prePage_browTime: parseInt((currentTime - startTime) / 1000) + "s",
  };
  if(token){
    Brow_history.user = JSON.parse(sessionStorage.getItem("user"));
  }
  console.log(Brow_history);
  console.log(
    "用户由 ",
    from.path,
    " 页面 跳转到 ",
    to.path,
    " 页面,在 ",
    from.path,
    " 页面停留了 ",
    currentTime - startTime,
    "毫秒。转换成秒数约为:",
    parseInt((currentTime - startTime) / 1000)
  );
  //初始化开始时间
  startTime = Date.now();
  console.log("======== 分割线 ========");
};

router.beforeEach((to, from, next) => {
  NProgress.start();
  if (to.meta.title) {
    //判断是否有标题
    document.title = to.meta.title;
  }
  if (to.meta.requireAuth == true) {
    const token = getToken();
    //需要登录权限进入的路由
    if (token) {
    //调用刚才定义的函数
      get_userinfo(to, from, token);
      next();
    } else {
      Message.error("未登录");
      next({ name: "login" });
    }
  } else {
    get_userinfo(to, from);
    //不需要登录权限
    next();
  }
  // next();
});

最后,看到页面输出,操作成功。
在这里插入图片描述

<think>我们正在寻找适用于Vue前端项目埋点库或解决方案。根据引用内容,我们可以总结出几个可行的方案: 1. **自定义封装埋点库**(如引用[2]的`kk-vue-log`): - 支持在Vue文件和ts文件中使用 - 提供配置项(上传接口、方法、请求头、拦截器等) - 支持记录页面停留时间和跳转来源(需传入路由实例) 2. **使用神策埋点SDK**(如引用[3]): - 引入`sensorsdata`的SDK(`sa-sdk-javascript`) - 提供初始化配置(服务端地址、页面自动采集、点击图等) - 支持自动采集页面浏览事件和自定义事件 3. **其他通用方案**: - 如Google Analytics、百度统计等,但需要结合Vue特性进行封装 根据上述引用,我们重点推荐两个方向: ### 一、自定义封装方案(适合需要高度定制的项目) 引用[2]展示了一个名为`kk-vue-log`的封装库,它提供了以下功能: - 支持在`main.js`中全局配置 - 支持页面停留时间记录(通过`durationRoute`配置) - 支持路由跳转来源记录(通过`needReferrer`和`sign`配置) - 支持请求拦截器,可动态添加请求头(如token) 使用示例: ```javascript // main.js import Vue from 'vue' import kkVueLog from "kk-vue-log" import router from './router' const options = { url: "//your-backend-api", method: 'post', router, // 传入路由实例 durationRoute:['*'], // 记录所有页面停留时间 needReferrer: true, // 记录来源 sign: 'from' // 来源标记字段 } Vue.use(kkVueLog, options) ``` ### 二、使用成熟SDK(如神策数据) 引用[3]展示了神策埋点的集成方式: 1. 安装SDK:`npm install sa-sdk-javascript` 2. 创建封装文件(如`sensor.js`): ```javascript import sensors from 'sa-sdk-javascript' sensors.init({ server_url: '您的数据接收地址', show_log: false, is_track_single_page: true, // 开启单页面自动采集 heatmap: { clickmap: 'default', // 开启点击图 scroll_notice_map: 'default' // 开启触达图 } }) // 注册页面信息 sensors.registerPage({ current_url: location.href, referrer: document.referrer }) // 开启自动采集 sensors.quick('autoTrack') export default sensors ``` 3. 在Vue项目中全局引入(如`main.js`): ```javascript import sensors from './utils/sensor' Vue.prototype.$sensors = sensors ``` 4. 在组件中使用: ```javascript this.$sensors.track('event_name', { key: 'value' }) ``` ### 三、其他推荐库 1. **Vue-GA**:Google Analytics的Vue插件(适合使用GA的项目2. **vue-baidu-analytics**:百度统计的Vue插件 3. **logrocket**:专业的用户行为记录工具(收费) ### 选择建议 - 需要**深度定制**且**减少依赖** → 选择自定义封装(方案一) - 需要**成熟解决方案**且对接**神策后台** → 选择神策SDK(方案二) - 使用**第三方分析平台**(如GA/百度) → 选择对应插件 ### 注意事项 1. 单页面应用(SPA)需开启路由切换监听(如方案一的`router`配置和方案二的`is_track_single_page`) 2. 埋点数据安全:敏感信息需脱敏,建议在拦截器中统一处理 3. 性能影响:高频率埋点需考虑节流和批量上报 --- §§相关问题§§ 1. 如何在Vue3中实现手动埋点2. 如何避免埋点数据影响前端性能? 3. 神策埋点如何与Vue Router结合使用? 4. 埋点数据如何做用户行为分析?</think>基于提供的引用内容和Vue.js前端埋点需求,以下是推荐的埋点解决方案和库: ### 一、推荐埋点方案 1. **轻量级自定义封装方案**(引用[2]) ```javascript // main.js 配置 import kkVueLog from "kk-vue-log" Vue.use(kkVueLog, { url: "//your-api-endpoint", // 埋点上报接口 method: "post", // 上报方式 router, // 传入Vue Router实例 durationRoute: ["*"], // 所有页面记录停留时间 needReferrer: true, // 记录跳转来源 interceptorsRequest(config) { // 请求拦截器 config.headers.token = "动态token" return config } }) ``` **优势**: - 专为Vue设计,支持Vue文件和TS文件双环境 - 自动记录页面停留时间和路由跳转 - 支持请求拦截器动态添加参数 - 配置简单,开箱即用 2. **企业级神策埋点方案**(引用[3]) ```javascript // utils/sensor.js import sensors from 'sa-sdk-javascript' sensors.init({ server_url: '数据接收地址', is_track_single_page: true, // 开启SPA路由追踪 heatmap: { clickmap: 'default', // 开启点击热力图 scroll_notice_map: 'default' // 页面停留分析 } }) // 在路由守卫中使用 router.afterEach((to) => { sensors.registerPage({ current_url: to.fullPath }) sensors.quick('autoTrack') // 自动采集 }) ``` **适用场景**: - 需要用户行为分析热力图 - 企业级数据监控需求 - 跨平台数据统一管理 ### 二、其他推荐库 1. **Vue-GTM**(Google Tag Manager集成) ```bash npm install vue-gtm ``` ```javascript // 配置示例 Vue.use(VueGtm, { id: 'GTM-XXXXXX', // GTM容器ID vueRouter: router // 自动追踪路由 }) ``` 2. **Vue-Analytics**(Google Analytics集成) ```javascript Vue.use(VueAnalytics, { id: 'UA-XXXXX-X', router, autoTracking: { pageviewOnLoad: true } }) ``` ### 三、选择建议 | 方案类型 | 适用场景 | 特点 | |----------------|---------------------------|---------------------------| | 自定义封装 | 中小项目/定制需求 | 轻量灵活,开发成本低 | | 神策SDK | 企业级数据分析 | 功能全面,支持行为热力图 | | Google系方案 | 海外项目/Google生态 | 无缝集成GA/AdWords | ### 四、最佳实践 1. **路由级埋点**(在router.ts中): ```typescript router.beforeEach((to, from, next) => { trackEvent('ROUTE_CHANGE', { from: from.path, to: to.path }) // [^2] next() }) ``` 2. **组件级埋点**(Vue单文件组件): ```vue <script> export default { mounted() { this.$track('PAGE_VIEW', { page: this.$route.name, duration: 0 }) // [^2] }, beforeDestroy() { reportPageDuration() // 上报页面停留时间 [^3] } } </script> ``` 3. **自定义事件上报**: ```javascript // 任意.ts文件 import track from '@lib/tracker' track('BUTTON_CLICK', { element: 'buy-now', product_id: 12345 }) // [^1][^2] ``` ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值