UNPKG

qh-monitor

Version:

这是一个埋点SDK This is a buried SDK

109 lines (105 loc) 3.27 kB
'use strict'; /** * @requestUrl 接口地址 * @domMonitor 携带Monitor-key 点击事件上报 * @sdkVersionsdk 版本 * @jsError js 和 promise 报错异常上报 */ //版本 var MonitorConfig; (function (MonitorConfig) { MonitorConfig["version"] = "1.0.8"; })(MonitorConfig || (MonitorConfig = {})); var MouseEventList = [ "click", "dblclick", "contextmenu", "mousedown", "mouseup", "mouseenter", "mouseout", "mouseover", ]; var Monitor = /** @class */ (function () { function Monitor(options) { this.data = Object.assign(this.initDef(), options); this.installInnerTrack(); } Monitor.prototype.initDef = function () { this.version = MonitorConfig.version; return { sdkVersion: this.version, domMonitor: false, jsError: false }; }; Monitor.prototype.sendMonitor = function (data) { this.reportMonitor(data); }; Monitor.prototype.installInnerTrack = function () { if (this.data.domMonitor) { this.targetKeyReport(); } if (this.data.jsError) { this.jsError(); } }; //dom 点击、双击、右键点击、鼠标事件上报 Monitor.prototype.targetKeyReport = function () { var _this = this; MouseEventList.forEach(function (event) { window.addEventListener(event, function (e) { var target = e.target; var targetValue = target.getAttribute(event + "-target-key"); if (targetValue) { _this.sendMonitor({ targetKey: targetValue, event: event, message: '触发了 ' + event + ' 事件!!' }); } }); }); }; Monitor.prototype.jsError = function () { this.errorEvent(); this.promiseReject(); }; //捕获js报错 Monitor.prototype.errorEvent = function () { var _this = this; window.addEventListener("error", function (e) { _this.sendMonitor({ targetKey: "js", event: "js", message: e.message }); }); }; //捕获promise 错误 Monitor.prototype.promiseReject = function () { var _this = this; window.addEventListener("unhandledrejection", function (event) { event.promise["catch"](function (error) { _this.sendMonitor({ targetKey: "reject", event: "promise", message: error }); }); }); }; //上报 Monitor.prototype.reportMonitor = function (data) { var params = Object.assign(this.data, data, { time: new Date().getTime() }); var headers = { type: "application/x-www-form-urlencoded" }; var blob = new Blob([JSON.stringify(params)], headers); navigator.sendBeacon(this.data.requestUrl, blob); }; return Monitor; }()); module.exports = Monitor;