qh-monitor
Version:
这是一个埋点SDK This is a buried SDK
109 lines (105 loc) • 3.27 kB
JavaScript
/**
* @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;
;