visual-buried-point-platform-h5 1.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +8 -0
- package/README.md +434 -0
- package/dist/buried-point-h5.js +1 -0
- package/image/101.png +0 -0
- package/image/102.png +0 -0
- package/image/103.png +0 -0
- package/image/104.png +0 -0
- package/image/105.png +0 -0
- package/image/img1.png +0 -0
- package/image/img2.png +0 -0
- package/image/img3.png +0 -0
- package/lsi-md5.js +22 -0
- package/package.json +37 -0
- package/rollup.config.js +36 -0
- package/src/config/global.ts +82 -0
- package/src/config/index.ts +138 -0
- package/src/hack.ts +201 -0
- package/src/handlers.ts +882 -0
- package/src/index.ts +341 -0
- package/src/reporter.ts +122 -0
- package/src/typing.d.ts +24 -0
- package/src/typings/index.d.ts +300 -0
- package/src/utils/cache.ts +30 -0
- package/src/utils/cacheCu.ts +30 -0
- package/src/utils/cachePuv.ts +30 -0
- package/src/utils/cloneDocument.ts +236 -0
- package/src/utils/db.ts +172 -0
- package/src/utils/getXPath.ts +166 -0
- package/src/utils/index.ts +69 -0
- package/src/utils/lazyReport.ts +425 -0
- package/src/utils/tools.ts +574 -0
- package/src/utils/xhr.ts +4 -0
- package/tsconfig.json +35 -0
package/.babelrc
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
# visual-buried-point-platform-h5
|
|
2
|
+
# 可视化埋点JS SDK接入指南
|
|
3
|
+
|
|
4
|
+
### SDK更新日志
|
|
5
|
+
- 1.2.0 新增页面浏览时长统计功能、优化埋点精度、统计事件绑定用户标识等;
|
|
6
|
+
- 1.2.7 新增可自定义事件埋点接口、增加元素名称、访问途径等采集;
|
|
7
|
+
- 1.2.8 新增PV/UV统计、元数据配置,访问链路追踪等;
|
|
8
|
+
- 1.3.2 新的数据结构和修改PV/UV流量上报方式;
|
|
9
|
+
- 1.3.3 自定义埋点数据结构增加page对象和事件标识符eventCode;
|
|
10
|
+
|
|
11
|
+
### 1.基本原理
|
|
12
|
+
|
|
13
|
+
Web SDK 是用原生 JavaScript 语言编写。理论支持 IE6+ 的浏览器。
|
|
14
|
+
|
|
15
|
+
Web SDK 的原理,主要是通过原生 JavaScript 代码,去监控页面的点击等操作,并自动获取屏幕宽高等属性,然后发送请求。因为 Web SDK 是面向传统的浏览器环境的,跟框架没有关系!也就是说必须也且只能是在 “ 浏览器上运行的网页中 ” 就可以使用 Web SDK。这里的几个特点:
|
|
16
|
+
|
|
17
|
+
* 能支持 JavasScript 语言的环境
|
|
18
|
+
* 能支持 Web 浏览器的环境
|
|
19
|
+
|
|
20
|
+
能支持 JavasScript 语言的环境
|
|
21
|
+
能支持 Web 浏览器的环境
|
|
22
|
+
因为要满足上述的 Web + JavaScirpt 的环境,所以我们称 SDK 为 Web JS SDK,简称 Web SDK。
|
|
23
|
+
|
|
24
|
+
<!-- ## 功能
|
|
25
|
+
|
|
26
|
+
* 上报pv uv
|
|
27
|
+
* 捕获error
|
|
28
|
+
* 上报性能performance
|
|
29
|
+
* 上报用户轨迹
|
|
30
|
+
* 支持单页面
|
|
31
|
+
* hack ajax fetch
|
|
32
|
+
* 上报加载的资源
|
|
33
|
+
* hack console
|
|
34
|
+
* hack onpopstate
|
|
35
|
+
* 暴露全局变量__bb
|
|
36
|
+
* 埋点 sum avg msg
|
|
37
|
+
* 无埋点方案 -->
|
|
38
|
+
|
|
39
|
+
<!-- // TODO:lodash -->
|
|
40
|
+
|
|
41
|
+
## 用法
|
|
42
|
+
|
|
43
|
+
token在可视化埋点后台申请
|
|
44
|
+
|
|
45
|
+
### 方法一 npm | yarn、并添加配置文件 buried-point.ts
|
|
46
|
+
```javascript
|
|
47
|
+
npm i visual-buried-point-platform-h5 -S --registry=http://verdaccio.gogdev.cn/
|
|
48
|
+
|
|
49
|
+
yarn add visual-buried-point-platform-h5 --registry=http://verdaccio.gogdev.cn/
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 方法二 、导入 buried-point-h5.js 包,并添加配置文件 buried-point.ts【推荐】
|
|
53
|
+
```js
|
|
54
|
+
import * as BuriedPointH5 from 'visual-buried-point-platform-h5';
|
|
55
|
+
ts declare module 'visual-buried-point-platform-h5';
|
|
56
|
+
|
|
57
|
+
export const buriedPoint = new BuriedPointH5({
|
|
58
|
+
//配置
|
|
59
|
+
token: 'xxx',
|
|
60
|
+
environment: 'test',
|
|
61
|
+
reportUrl: ''
|
|
62
|
+
...
|
|
63
|
+
...
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
// uniapp兼容写法
|
|
67
|
+
import * as BuriedPointH5 from 'visual-buried-point-platform-h5';
|
|
68
|
+
const BP = BuriedPointH5.default || BuriedPointH5
|
|
69
|
+
export const buriedPoint = new BP({
|
|
70
|
+
//配置
|
|
71
|
+
token: 'xxx',
|
|
72
|
+
environment: 'test',
|
|
73
|
+
reportUrl: ''
|
|
74
|
+
...
|
|
75
|
+
...
|
|
76
|
+
})
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 添加buried-point.ts配置文件
|
|
80
|
+
|
|
81
|
+
- 注:t_name、token、t_version 对应修改
|
|
82
|
+
|
|
83
|
+
```js
|
|
84
|
+
// import * as BuriedPointH5 from 'visual-buried-point-platform-h5';
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
86
|
+
const BuriedPointH5 = require("./buried-point-h5.js");
|
|
87
|
+
export const BuriedPoint = new BuriedPointH5({
|
|
88
|
+
/** 上报地址(可选) */
|
|
89
|
+
reportUrl: 'http://localhost:8000',
|
|
90
|
+
/** 上报参数。需填入管理端生成的token 与 ·enableJavaScriptBridge·字段互斥 */
|
|
91
|
+
token: '',
|
|
92
|
+
/** appkey (可选)*/
|
|
93
|
+
appkey: '';
|
|
94
|
+
/** 业务板块 (可选)*/
|
|
95
|
+
busSegment: '';
|
|
96
|
+
/** 业务模块 (可选)*/
|
|
97
|
+
module: '';
|
|
98
|
+
// app版本
|
|
99
|
+
appVersion: '1.0.0',
|
|
100
|
+
// 环境 取值 `dev` `test` `prod`。当开启环境配置参数后上报地址随环境变化 可以不配置上报地址
|
|
101
|
+
environment: 'dev',
|
|
102
|
+
// 脚本延迟上报时间
|
|
103
|
+
outtime: 3000,
|
|
104
|
+
// 开启单页面?
|
|
105
|
+
enableSPA: true,
|
|
106
|
+
// 是否自动上报pv
|
|
107
|
+
autoSendPv: true,
|
|
108
|
+
// 是否上报页面性能数据
|
|
109
|
+
isPage: true,
|
|
110
|
+
// 是否上报ajax性能数据
|
|
111
|
+
isAjax: true,
|
|
112
|
+
// 是否上报页面资源数据
|
|
113
|
+
isResource: true,
|
|
114
|
+
// 是否上报错误信息
|
|
115
|
+
isError: true,
|
|
116
|
+
// 是否录屏
|
|
117
|
+
isRecord: true,
|
|
118
|
+
// 是否上报行为
|
|
119
|
+
isBehavior: true,
|
|
120
|
+
// 是否开启了CSS HASH值,(默认开启) [针对商品列表情况埋点,建议false]
|
|
121
|
+
isOpenCSSHash: true,
|
|
122
|
+
// 业务线流量上报的应用 name
|
|
123
|
+
t_name: '购物',
|
|
124
|
+
// 业务线流量上报的当前应用 version
|
|
125
|
+
t_version: 'v1.0.0',
|
|
126
|
+
ignore: {
|
|
127
|
+
ignoreErrors: [],
|
|
128
|
+
ignoreUrls: [],
|
|
129
|
+
ignoreApis: ['/api/v1/report/web', 'livereload.js?snipver=1', '/sockjs-node/info'],
|
|
130
|
+
},
|
|
131
|
+
behavior: {
|
|
132
|
+
console: ['log', 'error'], // 取值可以是"debug", "info", "warn", "log", "error"
|
|
133
|
+
click: true,
|
|
134
|
+
},
|
|
135
|
+
// 最长上报数据长度
|
|
136
|
+
maxLength: 1000,
|
|
137
|
+
// Web JS SDK 的 H5 页面,在嵌入到 App 后,H5 内的事件可以通过 App 进行发送 默认关闭
|
|
138
|
+
// 当开启次字段配置 token字段失效 打通APP上报数据依据所在环境判断 必须配置 androidToken与iosToken字段
|
|
139
|
+
enableJavaScriptBridge: false,
|
|
140
|
+
// 打通H5与APP通信后,上报数据ID
|
|
141
|
+
androidToken: null,
|
|
142
|
+
iosToken: null
|
|
143
|
+
});
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## 初始化
|
|
147
|
+
|
|
148
|
+
```javascript
|
|
149
|
+
// buried-point-h5.js和buried-point.ts放入utils文件夹中
|
|
150
|
+
// 在main.js 或者 main.ts 入口
|
|
151
|
+
import "./utils/buried-point";
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## 3.设置绑定用户ID
|
|
155
|
+
|
|
156
|
+
```js
|
|
157
|
+
// 应用登录成功后,调用下面API设置用户ID,后续产生的统计事件将会与该用户关联起来
|
|
158
|
+
buriedPoint.setUserInfo(xxxx)
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## 4.自定义上报
|
|
162
|
+
|
|
163
|
+
### 4.1 自定义埋点事件对接可视化埋点平台说明
|
|
164
|
+
|
|
165
|
+
#### 4.1.1 事件名称规范:
|
|
166
|
+
|
|
167
|
+
- 事件名称需按照事件类型_元素名称/页面名称_平台规则填写,例如“浏览_首页_ web”“点击_xxx商品_ web”
|
|
168
|
+
|
|
169
|
+
- 事件名称需唯一
|
|
170
|
+
|
|
171
|
+
#### 4.1.2 事件类型:
|
|
172
|
+
|
|
173
|
+
- 事件类型仅能选择可视化埋点提供的事件类型,各个事件类型的触发、上报由各自定义埋点业务平台自行确认,事件类型包括以下四种:
|
|
174
|
+
|
|
175
|
+
- **搜索事件【 search 】**
|
|
176
|
+
|
|
177
|
+
- **动作事件【 action 】**
|
|
178
|
+
|
|
179
|
+
- **点击事件【 click 】**
|
|
180
|
+
|
|
181
|
+
- **浏览事件【 browse 】**
|
|
182
|
+
|
|
183
|
+
#### 4.1.3自定义埋点事件包含事件内容说明:
|
|
184
|
+
|
|
185
|
+
- 事件ID
|
|
186
|
+
|
|
187
|
+
- 事件名称
|
|
188
|
+
|
|
189
|
+
- 事件类型,仅包含搜索事件、动作事件、点击事件、浏览事件四种事件类型。
|
|
190
|
+
|
|
191
|
+
- 事件触发时间,事件触发时间为用户触发埋点事件时间。
|
|
192
|
+
|
|
193
|
+
- 扩展参数,参数内容为自定义埋点平台自行定义,该事件需要额外传到可视化平台上的事件内容,以json字符串方式上传;json字符串长度限制为500字符,大于500字符参数可正常上报,做截断展示。
|
|
194
|
+
|
|
195
|
+
## 5.设置自定义上报
|
|
196
|
+
|
|
197
|
+
```javascript
|
|
198
|
+
// 调用自定义上报
|
|
199
|
+
buriedPoint.setCustomEvent(data)
|
|
200
|
+
// 注:
|
|
201
|
+
data: json字符串
|
|
202
|
+
{
|
|
203
|
+
$event_id: 对应创建的事件ID [ 必填字段 ]
|
|
204
|
+
$busSegment: 业务板块 【非必填字段,建议业务填上, 否则数据统计可能出现缺失】【表1】
|
|
205
|
+
$module: 业务模块 【非必填字段,建议根据业务填上, 否则数据统计可能出现缺失】【表1】
|
|
206
|
+
$extend_param: 扩展参数(JSON) [ 非必填字段(建议根据业务需求填上) ]
|
|
207
|
+
$event_code: 事件标识符 【必填字段,建议根据业务填上, 否则数据统计可能出现缺失】
|
|
208
|
+
$page: 当前页对象 【非必填字段,建议根据业务填上, 否则数据统计可能出现缺失】
|
|
209
|
+
$path: 埋点组件的路径 【必填字段,建议根据业务填上, 否则数据统计可能出现缺失】
|
|
210
|
+
}
|
|
211
|
+
// 参考例子:【搜素事件】
|
|
212
|
+
import { BuriedPoint } from "@/utils/buried-point";
|
|
213
|
+
const params = {
|
|
214
|
+
$event_id: "3156566905601572864",
|
|
215
|
+
$busSegment: 1,
|
|
216
|
+
$module: 1,
|
|
217
|
+
$extend_param: {
|
|
218
|
+
title: "自定义[搜索事件]上报-搜索_首页搜索框",
|
|
219
|
+
searchContent: "猕猴桃"
|
|
220
|
+
},
|
|
221
|
+
$event_code: "",
|
|
222
|
+
$page: {
|
|
223
|
+
domain: "",
|
|
224
|
+
path: "",
|
|
225
|
+
title: "",
|
|
226
|
+
},
|
|
227
|
+
$path: "",
|
|
228
|
+
}
|
|
229
|
+
buriedPoint.setCustomEvent(params)
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
表1
|
|
233
|
+
|
|
234
|
+
```js
|
|
235
|
+
示例如下:
|
|
236
|
+
业务板块 业务模块
|
|
237
|
+
busSegment module
|
|
238
|
+
1.景区/门票 1.门票
|
|
239
|
+
2.民宿/酒店 1.民宿 2.酒店
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## 6、流量上报
|
|
243
|
+
|
|
244
|
+
- sdk初始化后,可通过**onStartTrack(params)** 方法注册上报流量,并为上报添加属性值:
|
|
245
|
+
|
|
246
|
+
**注册上报流量:onStartTrack(params)**
|
|
247
|
+
|
|
248
|
+
**配置:**【以下配置参数建议上报】
|
|
249
|
+
|
|
250
|
+
| 参数 | 必填 | 类型 | 描述 |
|
|
251
|
+
| ------------ | ---- | ----------- | ---------------- |
|
|
252
|
+
| domain | 否 | string | 域名 |
|
|
253
|
+
| path | 否 | string | 路径 |
|
|
254
|
+
| ctk | 否 | string | 渠道推广编码 |
|
|
255
|
+
| busSegment | 否 | string | 业务板块 【表1】 |
|
|
256
|
+
| module | 否 | string | 业务模块 【表1】 |
|
|
257
|
+
| extend_param | 否 | JSON对象 {} | 扩展参数 |
|
|
258
|
+
| title | 否 | string | 页面名称 |
|
|
259
|
+
|
|
260
|
+
**示例:**
|
|
261
|
+
|
|
262
|
+
```javascript
|
|
263
|
+
// 注:
|
|
264
|
+
data: JSON对象
|
|
265
|
+
const params = {
|
|
266
|
+
domain: "xxxx",
|
|
267
|
+
busSegment: 1,
|
|
268
|
+
module: 1,
|
|
269
|
+
title: "店铺详情",
|
|
270
|
+
extend_param: {
|
|
271
|
+
goods_id: 123456, //商品id 【根据业务确定】
|
|
272
|
+
store_id: 1111, //店铺id 【...】
|
|
273
|
+
business_id: 222, //商户id 【...】
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
buriedPoint.onStartTrack(params)
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
**销毁上报流量:调用onDestroyTrack()进行销毁**
|
|
280
|
+
|
|
281
|
+
**示例:**
|
|
282
|
+
|
|
283
|
+
```javascript
|
|
284
|
+
buriedPoint.onDestroyTrack()
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## 6、批量创建事件ID
|
|
288
|
+
|
|
289
|
+
## main.py
|
|
290
|
+
|
|
291
|
+
用于批量创建和批量生成埋点数据的脚本,**如不存在批量创建事件,可直接通过埋点管理端创建即可**
|
|
292
|
+
|
|
293
|
+
### 准备
|
|
294
|
+
|
|
295
|
+
#### 1.安装环境
|
|
296
|
+
|
|
297
|
+
需要在电脑上安装 python 环境
|
|
298
|
+
|
|
299
|
+
#### 2.安装依赖
|
|
300
|
+
|
|
301
|
+
```shell
|
|
302
|
+
pip install requests
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## example示例:
|
|
306
|
+
|
|
307
|
+
#### 1、在 `utils/buryPoint` 中创建各业务模块文件夹,并在文件夹下创建 `parameter.py` 文件 及 `enum.js` 文件,内容参考 `route`【路线业务模块】 文件夹,并将 `enum.js` 在 `index.js` 中导出
|
|
308
|
+
|
|
309
|
+
.
|
|
310
|
+
|
|
311
|
+
#### 2、按各自业务修改其中的变量名
|
|
312
|
+
|
|
313
|
+
- 注:重要!重要!:注意先查看main.py中需要修改的:
|
|
314
|
+
- projectId为埋点管理端上创建项目时生成的 **token**,参考 初始化方式 的图1
|
|
315
|
+
|
|
316
|
+
.
|
|
317
|
+
|
|
318
|
+

|
|
319
|
+
|
|
320
|
+

|
|
321
|
+
|
|
322
|
+
.
|
|
323
|
+
|
|
324
|
+
#### 3、按需修改 main.py 最底部调用方法
|
|
325
|
+
|
|
326
|
+
- batchCreate: 批量创建【先执行第一步】
|
|
327
|
+
- batchWrite: 批量生成【再执行第二步】
|
|
328
|
+
|
|
329
|
+
先执行 `batchCreate` 方法将数据推到埋点后台管理系统中,再执行 `batchWrite` 方法,将后台管理中的数据写入到本地文件中
|
|
330
|
+
|
|
331
|
+
#### 4、执行脚本
|
|
332
|
+
|
|
333
|
+
##### 方式一(推荐)
|
|
334
|
+
|
|
335
|
+
在命令后增加**业务模块文件夹**名称,自动执行该文件夹下的参数文件
|
|
336
|
+
|
|
337
|
+
```python
|
|
338
|
+
python main.py route
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
#### 5、按环境生成 `enum.xxx.js` 文件,并在 `utils/buryPoint/enum.js` 中导出
|
|
342
|
+
|
|
343
|
+
```javascript
|
|
344
|
+
注:这里默认会生成 `enum.commonm.js` 文件,如果后续生产或其他环境又是另外一份数据,到时候可以修改脚本,对不同环境进行适配
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
#### 6、代码使用
|
|
348
|
+
|
|
349
|
+
查看**index.js**文件或者**index.tsx**相关文件
|
|
350
|
+
|
|
351
|
+
```javascript
|
|
352
|
+
// index.js
|
|
353
|
+
import { setCustomEvent, onStartTrack, onDestroyTrack } from '@/utils/pointAction';
|
|
354
|
+
|
|
355
|
+
class Favourite extends Component {
|
|
356
|
+
|
|
357
|
+
//注册
|
|
358
|
+
componentDidMount() {
|
|
359
|
+
this.genData();
|
|
360
|
+
onStartTrack('我的收藏', null);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
//销毁
|
|
364
|
+
componentWillUnmount() {
|
|
365
|
+
onDestroyTrack();
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
// 点击取消收藏上报
|
|
369
|
+
cancel(e, obj) {
|
|
370
|
+
setCustomEvent('点击-我的-我的收藏-取消收藏');
|
|
371
|
+
}
|
|
372
|
+
render() {
|
|
373
|
+
return (
|
|
374
|
+
<div >
|
|
375
|
+
...
|
|
376
|
+
...
|
|
377
|
+
...
|
|
378
|
+
|
|
379
|
+
</div>
|
|
380
|
+
)
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
export default Favourite;
|
|
385
|
+
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
```javascript
|
|
389
|
+
// index.tsx
|
|
390
|
+
import React, { useEffect, useState } from 'react'
|
|
391
|
+
import { setCustomEvent, onStartTrack, onDestroyTrack } from '@/utils/pointAction';
|
|
392
|
+
|
|
393
|
+
const PageComponent = (props: any) => {
|
|
394
|
+
// 进入编辑页面
|
|
395
|
+
const toEditAddressPage = (item: any) => {
|
|
396
|
+
setCustomEvent('点击-地址管理-编辑');
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
useEffect(() => {
|
|
400
|
+
onStartTrack('地址管理', null);
|
|
401
|
+
return () => {
|
|
402
|
+
onDestroyTrack();
|
|
403
|
+
};
|
|
404
|
+
}, []);
|
|
405
|
+
|
|
406
|
+
useEffect(() => {
|
|
407
|
+
getDataSource()
|
|
408
|
+
}, [])
|
|
409
|
+
|
|
410
|
+
return (
|
|
411
|
+
<div>
|
|
412
|
+
...
|
|
413
|
+
...
|
|
414
|
+
</div>
|
|
415
|
+
);
|
|
416
|
+
};
|
|
417
|
+
|
|
418
|
+
export default connect(({trade}) => {
|
|
419
|
+
return {site: trade.site}
|
|
420
|
+
})(PageComponent);
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
#### 7、埋点后台管理系统
|
|
424
|
+
|
|
425
|
+
##### 云测管理端地址
|
|
426
|
+
|
|
427
|
+
- chameleon.gcongo.com.cn
|
|
428
|
+
|
|
429
|
+
#### 8、SDK 文档
|
|
430
|
+
|
|
431
|
+
http://verdaccio.gogdev.cn/-/web/detail/visual-buried-point-platform-miniprogram
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
|