统计分析工具

news2024/9/25 15:21:59

百度统计

百度统计访问地址

https://tongji.baidu.com/web/10000370440/homepage/index

创建项目及获取项目标识

1、创建分析网站

在这里插入图片描述
在管理页面中点击新增网站,填写完信息

2、获取代码在这里插入图片描述

得到如下代码:

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

百度统计接入代码

1、需要在main.ts代码中添加如下代码

问号后面为百度统计针对项目的唯一标识
//百度统计接入代码

let win: any = window
var _hmt: any = _hmt || [];
win._hmt = _hmt; // 修改为window 全局变量
(function () {
    var hm = document.createElement("script");
    hm.src = "https://hm.baidu.com/hm.js?9a7fcafecd619f300542b1185aa7a723";
    var s = document.getElementsByTagName("script")[0];
    // @ts-ignore
    s.parentNode.insertBefore(hm, s);
})();

2、页面跳转添加埋点

利用vue中的router进行跳转之前埋点
routers中是需要埋点的页面

// // 加入百度统计
router.beforeEach((to: { name: any; path: any }, from: any, next: () => void) => {
if (to.path) {
if (win._hmt) {
let value = routes[to.name].label;
win._hmt.push([‘_trackPageview’, ‘/’+value])
}
}
next()
})

// @ts-ignore
const routers: any = {
‘Home’: {label: ‘【首页】’},
‘Detail’: {label: ‘【文档详情】页-发送视角’},
‘Send’: {label: ‘【发送资料】-发邮件页’},
‘Record’: {label: ‘【发送记录】页’},
‘Email’: {label: ‘【记录详情】页’},
‘Sdt’: {label: ‘【文档详情】页-查看视角’},
‘EmailOut’: {label: ‘首页’},
‘OpenDetail’: {label: ‘【记录详情】页’}
}

3、事件添加埋点

统一埋点函数
// 百度统计统计平台埋点
// category: 必选 String => 要监控的目标的类型名称 => 不填、填"-“的事件会被抛弃
// action: 必选 String => 用户跟网页进行交互的动作名称=> 不填、填”-“的事件会被抛弃
// opt_label: 可选 String => 事件的一些额外信息 => 不填、填”-"代表此项为空
// opt_value: 可选 Number => 跟事件相关的数值
export function setSpot(category, action, opt_value) {
if(_hmt){
console.log(百度统计埋点:category: c a t e g o r y a c t i o n : {category} action: categoryaction:{action} opt_value:${opt_value})
_hmt.push([‘_trackEvent’, category, action, opt_value]);
}
}

3.1、通过指令进行埋点

添加vue指令:点击指令tap;输入指令 inputEvent,拖拽指令dragContent

/**
 *
 * 点击事件
 /
const myGesture = {};

// eslint-disable-next-line
function gestrue(Vue, options) {
    let interval;
    Vue.directive('tap', {
        // 当被绑定的元素插入到 DOM 中时……
        bind(el, binding, vNode) {
            el.addEventListener('click', (event) => {
                if (typeof binding.arg !== "object") {
                    setSpot(indexArr['key_' + binding.arg].title, 'click', indexArr['key_' + binding.arg].label)
                } else {
                    setSpot(productList[binding.arg.label].title, 'click', productList[binding.arg.label].label)
                }
                if (typeof binding.value == 'function') {
                    binding.value();
                }
            });
        }
    });
    Vue.directive('inputEvent', {
        // 当被绑定的元素插入到 DOM 中时……
        bind(el, binding, vNode) {
            el.addEventListener('input', (event) => {
                if (interval) {
                    clearTimeout(interval)
                }
                interval = setTimeout(() => {
                    setSpot(indexArr['key_' + binding.arg].title, 'input', indexArr['key_' + binding.arg].label)
                    if (typeof binding.value == 'function') {
                        binding.value();
                    }
                }, 200)
            });
        }
    });
    Vue.directive('dragContent', {
        // 当被绑定的元素插入到 DOM 中时……
        bind(el, binding, vNode) {
            el.addEventListener('dragstart', (event) => {
                setSpot(indexArr['key_' + binding.arg].title, 'dragstart', indexArr['key_' + binding.arg].label)
                if (typeof binding.value == 'function') {
                    binding.value();
                }
            });
        }
    });
}

myGesture.install = gestrue;

/*
 * 点击事件埋点数组
 */
const indexArr = {
    key_1: {title: '首页', label: '【首页】-搜索框'}
}
const productList = {
    "全部": {title: '首页', label: '【首页】-产品线全部'},
    "交换产品": {title: '首页', label: '【首页】-交换产品'}
}

3.2、指令埋点使用方式

在需要埋点的按钮添加指令即可
冒号后面的参数可以传入指令函数中通过binding.arg来获取
栗子:

        <el-button v-tap:19 v-else type="primary" icon="el-icon-s-promotion" @click="toggleSendBox"></el-button>

TakingData
去官网注册添加一个网页应用
在应用基础信息页面可以获取应用id和应用名称,之后还需要去版本管理获取版本号
获取完基础信息之后需要在 vue 项目的index.html界面添加如下代码

<script src="http://sdk.talkingdata.com/app/h5/v1?appid=22C977DB613D4FFD951ED9E87559B03E&vn=闪电兔pro&vc=

H5+APP+v1.0.5">

vn代码应用名,vc代表应用版本id
这边引入td统计接口,新增了一个js函数

// talkingData统计平台埋点
export function setSpot(sendMsg, logMsg) {
    try {
        console.log(logMsg)
        window.TDAPP.onEvent(sendMsg)
        return true
    } catch (err) {
        console.log(logMsg + '=>err', err)
        return false
    }
}

使用案例,导入js,使用到对应事件中
import {setSpot} from ‘…/util/tdUtils’
setSpot(“搜索内容:”+this.question,“点击搜索按钮”)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试开发必知必会:Pytest框架实战

应用场景&#xff1a; pytest 框架可以解决我们多个测试脚本一起执行的问题。 它提供了测试用例的详细失败信息&#xff0c;使得开发者可以快速准确地改正问题。它兼容最新版本的 Python。它还兼容 unittest、doctest 和 nose&#xff0c;开箱即用。接下来我们详细了解下pyte…

数据究竟是什么?

我们搞大数据的&#xff0c;每天都在说“数据”这个词。但是数据究竟是什么&#xff1f;其准确的定义是什么&#xff1f;可能大多数人都没有思考过这个问题。首先&#xff0c;我们来考察下数据这个词的起源。数据这个词在古汉语中是不存在的&#xff0c;而是近代以来&#xff0…

在ObjectARX(VC)中使用MFC-可停靠窗体

目录 前言 一、使用CAD的CAcUiDockControlBar类 二、在入口程序中注册命令 三、窗口实现 四、目录结构 五、注意事项 六、效果展示 前言 CAD中经常会看到这样的窗口&#xff0c;下面就看看是如何实现的。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可…

ESP-IDF:传统链表测试

ESP-IDF:传统链表测试 在ESP-IDF环境下简单地写个传统链表 /--------------Test 传统链表-------------/ //链表结点 typedef struct LINKNODE11 { void * data; LINKNODE11 * next; }linknode11; //链表头 typedef struct LINKLIST11 { linknode11 * head; int size; }linkli…

SpringBoot快速搭建WebSocket并测试

目录简介Pom文件服务端Service代码服务端配置代码服务端Controller&#xff1a;发送消息给客户端测试开启ws服务端简介 WebSocket协议通过在客户端和服务端之间提供全双工通信来进行Web和服务器的交互功能。 在ws应用程序中&#xff0c;服务器发布websocket端点。 一个ws连接的…

通用`Query`解决方案

文章目录通用Query解决方案简介什么是QueryQuery类别Query基本使用SQL Query基本使用自定义Query基本使用现状方案通过Json数据或方法动态生成Query 通过Select Sql语句动态生成Query通过Query生成动态Query支持传统的Query并通过参数形式生成Query列定义通用Query&#xff0c;…

nacos区分权限

背景 nacos的默认是不进行分配权限的&#xff0c;那么这样就带来了一个问题&#xff0c;如果多项目共同使用一个nacos&#xff0c;可以带了一个情况是开发人员误操作&#xff0c;把其他项目的nacos配置文件更改或者删除。那么如何解决这个问题呢&#xff1f;就是把nacos进行分…

TF-A源码移植

1.对tf-a源码进行解压$> tar xfz tf-a-stm32mp-2.2.r2-r0.tar.gz 2.打补丁进入/home/ubuntu/FSMP1A/tf-a-stm32mp-2.2.r2-r0/tf-a-stm32mp-2.2.r2-r0/tf-a-stm32mp-2.2.r2目录执行for p in ls -1 ../../*.patch; do patch -p1 < $p; done3.配置工具链1)进入/home/ubuntu/…

GJB 5000B二级-ESM外部供方管理

一、主要变化情况 新增3项(红色)、删除1项(黄色)、合并2项(绿色)、修订4项(蓝色) 将原标准过程域名称“供方协议管理”改为“外部供方管理”,其适应范围包括所以形式的外部提供过程、产品和服务协议,同时增加对外部供方按协议提供过程、产品和服务能力评价的内容,…

小偷和抢劫是被怎么遏制的?

小偷和抢劫是怎么被消灭的&#xff1f; 是被摄像头消灭的&#xff01; 一切土地和实物都会被安装传感设备监控 农业生产用地也会被物联检测 趣讲大白话&#xff1a;万物互联时代稳步实现 *********** 全国有5000万亩茶园 20年内一定会被物联网化 进入精耕农业时代 20年后&…

一篇文章带你了解自动化测试开发

都讲自动化测试开发&#xff0c;当然要把开发自动化测试框架也当做一个项目来做。这时候&#xff0c;就需要考虑应该选择何种类型的自动化测试框架&#xff1a;数据驱动、关键字驱动、还是Junit ,TestNG ? 抑或直接利用现有的开源自动化测试框架&#xff0c;如Robot Framework…

Mysql内核查询成本计算实战(一)

目录 Mysql内核查询成本计算实战&#xff08;一&#xff09; Optimizer Trace 什么是成本 I/O成本 CPU成本 单表查询的成本 MySQL查询成本计算实战 1.根据搜索条件&#xff0c;找出所有可能使用的索引 2. 计算全表扫描的代价 3. 计算使用不同索引执行查询的代价 4. 对…

CAD中怎么局部升降桥架?CAD局部升降操作技巧

在使用浩辰CAD电气软件绘制电气图纸的时候&#xff0c;常常会用到三维桥架中的一些功能来进行桥架的CAD设计工作&#xff0c;为了让大家对此有更深入的了解&#xff0c;接下来的CAD设计教程就和小编一起来看看正版CAD软件——浩辰CAD电气软件的三维桥架中局部升降功能的相关使用…

Magisk模块开发指南

BusyBox Magisk整合了功能完整的BusyBox二进制文件(包括对SELinux的完整支持)。执行文件位于/data/adb/magisk/busybox。Magisk的BusyBox支持运行时可切换的“ASH Standalone Shell Mode(ASH独立Shell模式)”。这种独立模式的意思是,在ashshell的中的BusyBox运行时,无论PATH…

MySQL核心参数优化文件my.ini详解

一.数据库服务器配置 CPU&#xff1a;48C 内存&#xff1a;128G DISK&#xff1a;3.2TSSD 二.CPU的优化 innodb_thread_concurrency32 表示SQL经过解析后&#xff0c;允许同时有32个线程去innodb引擎取数据&#xff0c;如果超过32个&#xff0c;则需要排队&#xff1b; 值太…

spring系列 SpringMVC-拦截器

拦截器&#xff08;Interceptor&#xff09;是在SpringMVC中动态拦截控制器方法的执行。 拦截器执行流程&#xff1a; 拦截器与过滤器区别 归属不同&#xff1a;Filter属于Servlet技术&#xff0c;Interceptor属于SpringMVC技术 拦截内容不同&#xff1a;Filter对所有访问进…

【Mysql第二期 MySQL环境搭建】

文章目录01.为什么要安装新版本&#xff1f;02.官网下载mysql03.安装配置初始化mysql04.查看 MySQL服务05.验证是否安装成功06.修改root密码07.如果有navicat工具可以在测试一下&#xff1a;01.为什么要安装新版本&#xff1f; mysql8.x版本和msyql5.x版本zip安装的方式大同小…

证券交易金融知识学习(1)

学习目标&#xff1a; 需要做一些关于投资交易软件的测试&#xff0c;需要了解操作背后的交易意义&#xff0c;需要学习一些金融基础知识。本人是金融证券交易的小白&#xff0c;从0开始学习。故记录一些金融知识学习的笔记&#xff0c;比较零散&#xff0c;目的是为了让自己复…

Spring-DI相关内容

Spring-DI相关内容 5&#xff0c;DI相关内容 前面我们已经完成了bean相关操作的讲解&#xff0c;接下来就进入第二个大的模块DI依赖注入&#xff0c;首先来介绍下Spring中有哪些注入方式? 我们先来思考 向一个类中传递数据的方式有几种? 普通方法(set方法)构造方法 依赖注…

【数据结构】8.4 选择排序

文章目录1. 简单选择排序简单选择排序算法简单排序算法分析2. 堆排序堆的定义堆的调整堆的建立堆排序算法堆排序算法分析1. 简单选择排序 基本思想 在待排序的数据中选出最大&#xff08;小&#xff09;的元素放在其最终的位置。 基本操作 首先通过 n - 1 次关键字比较&…