@ezuikit/utils-collect
Version:
collect utils
483 lines (480 loc) • 24.2 kB
JavaScript
!function(global, factory) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = factory() : "function" == typeof define && define.amd ? define(factory) : (global = "undefined" != typeof globalThis ? globalThis : global || self).Collect = factory();
}(this, function() {
"use strict";
var _window, VariableLibrary, MethodLibrary, LogicLibrary, DeviceInfo = (_window = "undefined" != typeof self ? self : window,
VariableLibrary = {
navigator: void 0 !== _window.navigator ? _window.navigator : {
userAgent: ""
},
infoMap: {
engine: [ "WebKit", "Trident", "Gecko", "Presto" ],
browser: [ "Safari", "Chrome", "Edge", "IE", "Firefox", "Firefox Focus", "Chromium", "Opera", "Vivaldi", "Yandex", "Arora", "Lunascape", "QupZilla", "Coc Coc", "Kindle", "Iceweasel", "Konqueror", "Iceape", "SeaMonkey", "Epiphany", "360", "360SE", "360EE", "UC", "QQBrowser", "QQ", "Baidu", "Maxthon", "Sogou", "LBBROWSER", "2345Explorer", "TheWorld", "XiaoMi", "Quark", "Qiyu", "Wechat", "Taobao", "Alipay", "Weibo", "Douban", "Suning", "iQiYi" ],
os: [ "Windows", "Linux", "Mac OS", "Android", "Ubuntu", "FreeBSD", "Debian", "iOS", "Windows Phone", "BlackBerry", "MeeGo", "Symbian", "Chrome OS", "WebOS" ],
device: [ "Mobile", "Tablet", "iPad" ]
}
}, MethodLibrary = {
getMatchMap: function(u) {
return {
Trident: u.includes("Trident") || u.includes("NET CLR"),
Presto: u.includes("Presto"),
WebKit: u.includes("AppleWebKit"),
Gecko: u.includes("Gecko/"),
Safari: u.includes("Safari"),
Chrome: u.includes("Chrome") || u.includes("CriOS"),
IE: u.includes("MSIE") || u.includes("Trident"),
Edge: u.includes("Edge"),
Firefox: u.includes("Firefox") || u.includes("FxiOS"),
"Firefox Focus": u.includes("Focus"),
Chromium: u.includes("Chromium"),
Opera: u.includes("Opera") || u.includes("OPR"),
Vivaldi: u.includes("Vivaldi"),
Yandex: u.includes("YaBrowser"),
Arora: u.includes("Arora"),
Lunascape: u.includes("Lunascape"),
QupZilla: u.includes("QupZilla"),
"Coc Coc": u.includes("coc_coc_browser"),
Kindle: u.includes("Kindle") || u.includes("Silk/"),
Iceweasel: u.includes("Iceweasel"),
Konqueror: u.includes("Konqueror"),
Iceape: u.includes("Iceape"),
SeaMonkey: u.includes("SeaMonkey"),
Epiphany: u.includes("Epiphany"),
360: u.includes("QihooBrowser") || u.includes("QHBrowser"),
"360EE": u.includes("360EE"),
"360SE": u.includes("360SE"),
UC: u.includes("UC") || u.includes(" UBrowser"),
QQBrowser: u.includes("QQBrowser"),
QQ: u.includes("QQ/"),
Baidu: u.includes("Baidu") || u.includes("BIDUBrowser"),
Maxthon: u.includes("Maxthon"),
Sogou: u.includes("MetaSr") || u.includes("Sogou"),
LBBROWSER: u.includes("LBBROWSER"),
"2345Explorer": u.includes("2345Explorer"),
TheWorld: u.includes("TheWorld"),
XiaoMi: u.includes("MiuiBrowser"),
Quark: u.includes("Quark"),
Qiyu: u.includes("Qiyu"),
Wechat: u.includes("MicroMessenger"),
Taobao: u.includes("AliApp(TB"),
Alipay: u.includes("AliApp(AP"),
Weibo: u.includes("Weibo"),
Douban: u.includes("com.douban.frodo"),
Suning: u.includes("SNEBUY-APP"),
iQiYi: u.includes("IqiyiApp"),
Windows: u.includes("Windows"),
Linux: u.includes("Linux") || u.includes("X11"),
"Mac OS": u.includes("Macintosh"),
Android: u.includes("Android") || u.includes("Adr"),
Ubuntu: u.includes("Ubuntu"),
FreeBSD: u.includes("FreeBSD"),
Debian: u.includes("Debian"),
"Windows Phone": u.includes("IEMobile") || u.includes("Windows Phone"),
BlackBerry: u.includes("BlackBerry") || u.includes("RIM"),
MeeGo: u.includes("MeeGo"),
Symbian: u.includes("Symbian"),
iOS: u.includes("like Mac OS X"),
"Chrome OS": u.includes("CrOS"),
WebOS: u.includes("hpwOS"),
Mobile: u.includes("Mobi") || u.includes("iPh") || u.includes("480"),
Tablet: u.includes("Tablet") || u.includes("Nexus 7"),
iPad: u.includes("iPad")
};
},
matchInfoMap: function(_this) {
var _VariableLibrary_navigator, u = (null == (_VariableLibrary_navigator = VariableLibrary.navigator) ? void 0 : _VariableLibrary_navigator.userAgent) || "", match = MethodLibrary.getMatchMap(u);
for (var s in VariableLibrary.infoMap) for (var i = 0; i < VariableLibrary.infoMap[s].length; i++) {
var value = VariableLibrary.infoMap[s][i];
match[value] && (_this[s] = value);
}
},
getOS: function() {
return MethodLibrary.matchInfoMap(this), null == this ? void 0 : this.os;
},
getOSVersion: function() {
var u = VariableLibrary.navigator.userAgent || "";
this.osVersion = "";
var osVersion = {
Windows: function() {
var v = u.replace(/^.*Windows NT ([\d.]+);.*$/, "$1");
return {
6.4: "10",
6.3: "8.1",
6.2: "8",
6.1: "7",
"6.0": "Vista",
5.2: "XP",
5.1: "XP",
"5.0": "2000"
}[v] || v;
},
Android: function() {
return u.replace(/^.*Android ([\d.]+);.*$/, "$1");
},
iOS: function() {
return u.replace(/^.*OS ([\d_]+) like.*$/, "$1").replace(/_/g, ".");
},
Debian: function() {
return u.replace(/^.*Debian\/([\d.]+).*$/, "$1");
},
"Windows Phone": function() {
return u.replace(/^.*Windows Phone( OS)? ([\d.]+);.*$/, "$2");
},
"Mac OS": function() {
return u.replace(/^.*Mac OS X ([\d_]+).*$/, "$1").replace(/_/g, ".");
},
WebOS: function() {
return u.replace(/^.*hpwOS\/([\d.]+);.*$/, "$1");
}
};
return "function" == typeof osVersion[this.os] && (this.osVersion = osVersion[this.os](),
this.osVersion == u && (this.osVersion = "")), this.osVersion;
},
getOrientationStatu: function() {
return window.matchMedia("(orientation: portrait)").matches ? "vertical" : "horizontal";
},
getDeviceType: function() {
return this.device = "PC", MethodLibrary.matchInfoMap(this), this.device;
},
getNetwork: function() {
var _this, _navigator, _navigator1, _navigator2;
return null == (_this = (null == (_navigator = navigator) ? void 0 : _navigator.connection) || (null == (_navigator1 = navigator) ? void 0 : _navigator1.mozConnection) || (null == (_navigator2 = navigator) ? void 0 : _navigator2.webkitConnection)) ? void 0 : _this.effectiveType;
},
getLanguage: function() {
var _VariableLibrary_navigator, _VariableLibrary_navigator1, arr;
return this.language = ((arr = ((null == (_VariableLibrary_navigator = VariableLibrary.navigator) ? void 0 : _VariableLibrary_navigator.browserLanguage) || (null == (_VariableLibrary_navigator1 = VariableLibrary.navigator) ? void 0 : _VariableLibrary_navigator1.language)).split("-"))[1] && (arr[1] = arr[1].toUpperCase()),
arr.join("_")), this.language;
},
createFingerprint: function(domain) {
var canvas = document.createElement("canvas"), ctx = canvas.getContext("2d"), txt = domain || window.location.host;
ctx.textBaseline = "top", ctx.font = "14px 'Arial'", ctx.fillStyle = "#f60", ctx.fillRect(125, 1, 62, 20),
ctx.fillStyle = "#069", ctx.fillText(txt, 2, 15), ctx.fillStyle = "rgba(102, 204, 0, 0.7)",
ctx.fillText(txt, 4, 17);
var b64 = canvas.toDataURL().replace("data:image/png;base64,", "");
return function(s) {
var i, l, n, o = "";
for (i = 0, l = (s += "").length; i < l; i++) o += (n = s.charCodeAt(i).toString(16)).length < 2 ? "0" + n : n;
return o;
}(atob(b64).slice(-16, -12));
},
getBrowserInfo: function() {
MethodLibrary.matchInfoMap(this);
var u = VariableLibrary.navigator.userAgent || "", _mime = function(option, value) {
var mimeTypes = VariableLibrary.navigator.mimeTypes;
for (var key in mimeTypes) if (mimeTypes[key][option] == value) return !0;
return !1;
}, match = MethodLibrary.getMatchMap(u), is360 = !1;
if (_window.chrome) {
var chrome_vision = u.replace(/^.*Chrome\/([\d]+).*$/, "$1");
+chrome_vision > 36 && _window.showModalDialog ? is360 = !0 : +chrome_vision > 45 && (is360 = _mime("type", "application/vnd.chromium.remoting-viewer"));
}
if (match.Baidu && match.Opera && (match.Baidu = !1), match.Mobile && (match.Mobile = !u.includes("iPad")),
is360 && (_mime("type", "application/gameplugin") || VariableLibrary.navigator && void 0 === VariableLibrary.navigator.connection.saveData ? match["360SE"] = !0 : match["360EE"] = !0),
match.IE || match.Edge) switch (window.screenTop - window.screenY) {
case 71:
case 74:
case 99:
case 75:
case 105:
break;
case 102:
match["360EE"] = !0;
break;
case 104:
match["360SE"] = !0;
}
var browerVersionMap = {
Safari: function() {
return u.replace(/^.*Version\/([\d.]+).*$/, "$1");
},
Chrome: function() {
return u.replace(/^.*Chrome\/([\d.]+).*$/, "$1").replace(/^.*CriOS\/([\d.]+).*$/, "$1");
},
IE: function() {
return u.replace(/^.*MSIE ([\d.]+).*$/, "$1").replace(/^.*rv:([\d.]+).*$/, "$1");
},
Edge: function() {
return u.replace(/^.*Edge\/([\d.]+).*$/, "$1");
},
Firefox: function() {
return u.replace(/^.*Firefox\/([\d.]+).*$/, "$1").replace(/^.*FxiOS\/([\d.]+).*$/, "$1");
},
"Firefox Focus": function() {
return u.replace(/^.*Focus\/([\d.]+).*$/, "$1");
},
Chromium: function() {
return u.replace(/^.*Chromium\/([\d.]+).*$/, "$1");
},
Opera: function() {
return u.replace(/^.*Opera\/([\d.]+).*$/, "$1").replace(/^.*OPR\/([\d.]+).*$/, "$1");
},
Vivaldi: function() {
return u.replace(/^.*Vivaldi\/([\d.]+).*$/, "$1");
},
Yandex: function() {
return u.replace(/^.*YaBrowser\/([\d.]+).*$/, "$1");
},
Arora: function() {
return u.replace(/^.*Arora\/([\d.]+).*$/, "$1");
},
Lunascape: function() {
return u.replace(/^.*Lunascape[\/\s]([\d.]+).*$/, "$1");
},
QupZilla: function() {
return u.replace(/^.*QupZilla[\/\s]([\d.]+).*$/, "$1");
},
"Coc Coc": function() {
return u.replace(/^.*coc_coc_browser\/([\d.]+).*$/, "$1");
},
Kindle: function() {
return u.replace(/^.*Version\/([\d.]+).*$/, "$1");
},
Iceweasel: function() {
return u.replace(/^.*Iceweasel\/([\d.]+).*$/, "$1");
},
Konqueror: function() {
return u.replace(/^.*Konqueror\/([\d.]+).*$/, "$1");
},
Iceape: function() {
return u.replace(/^.*Iceape\/([\d.]+).*$/, "$1");
},
SeaMonkey: function() {
return u.replace(/^.*SeaMonkey\/([\d.]+).*$/, "$1");
},
Epiphany: function() {
return u.replace(/^.*Epiphany\/([\d.]+).*$/, "$1");
},
360: function() {
return u.replace(/^.*QihooBrowser\/([\d.]+).*$/, "$1");
},
"360SE": function() {
return {
63: "10.0",
55: "9.1",
45: "8.1",
42: "8.0",
31: "7.0",
21: "6.3"
}[+u.replace(/^.*Chrome\/([\d]+).*$/, "$1")] || "";
},
"360EE": function() {
return {
69: "11.0",
63: "9.5",
55: "9.0",
50: "8.7",
30: "7.5"
}[+u.replace(/^.*Chrome\/([\d]+).*$/, "$1")] || "";
},
Maxthon: function() {
return u.replace(/^.*Maxthon\/([\d.]+).*$/, "$1");
},
QQBrowser: function() {
return u.replace(/^.*QQBrowser\/([\d.]+).*$/, "$1");
},
QQ: function() {
return u.replace(/^.*QQ\/([\d.]+).*$/, "$1");
},
Baidu: function() {
return u.replace(/^.*BIDUBrowser[\s\/]([\d.]+).*$/, "$1");
},
UC: function() {
return u.replace(/^.*UC?Browser\/([\d.]+).*$/, "$1");
},
Sogou: function() {
return u.replace(/^.*SE ([\d.X]+).*$/, "$1").replace(/^.*SogouMobileBrowser\/([\d.]+).*$/, "$1");
},
LBBROWSER: function() {
return {
57: "6.5",
49: "6.0",
46: "5.9",
42: "5.3",
39: "5.2",
34: "5.0",
29: "4.5",
21: "4.0"
}[+navigator.userAgent.replace(/^.*Chrome\/([\d]+).*$/, "$1")] || "";
},
"2345Explorer": function() {
return u.replace(/^.*2345Explorer\/([\d.]+).*$/, "$1");
},
TheWorld: function() {
return u.replace(/^.*TheWorld ([\d.]+).*$/, "$1");
},
XiaoMi: function() {
return u.replace(/^.*MiuiBrowser\/([\d.]+).*$/, "$1");
},
Quark: function() {
return u.replace(/^.*Quark\/([\d.]+).*$/, "$1");
},
Qiyu: function() {
return u.replace(/^.*Qiyu\/([\d.]+).*$/, "$1");
},
Wechat: function() {
return u.replace(/^.*MicroMessenger\/([\d.]+).*$/, "$1");
},
Taobao: function() {
return u.replace(/^.*AliApp\(TB\/([\d.]+).*$/, "$1");
},
Alipay: function() {
return u.replace(/^.*AliApp\(AP\/([\d.]+).*$/, "$1");
},
Weibo: function() {
return u.replace(/^.*weibo__([\d.]+).*$/, "$1");
},
Douban: function() {
return u.replace(/^.*com.douban.frodo\/([\d.]+).*$/, "$1");
},
Suning: function() {
return u.replace(/^.*SNEBUY-APP([\d.]+).*$/, "$1");
},
iQiYi: function() {
return u.replace(/^.*IqiyiVersion\/([\d.]+).*$/, "$1");
}
};
return this.browserVersion = "", browerVersionMap[this.browser] && (this.browserVersion = browerVersionMap[this.browser](),
this.browserVersion == u && (this.browserVersion = "")), "Edge" == this.browser && (this.engine = "EdgeHTML"),
"Chrome" == this.browser && parseInt(this.browserVersion) > 27 && (this.engine = "Blink"),
"Opera" == this.browser && parseInt(this.browserVersion) > 12 && (this.engine = "Blink"),
"Yandex" == this.browser && (this.engine = "Blink"), this.browser + " (version: " + this.browserVersion + "; kernel: " + this.engine + ")";
}
}, LogicLibrary = {
DeviceInfoObj: function(params) {
var _VariableLibrary_navigator, _loop = function(i) {
var _params_info;
null == (_params_info = params.info) || _params_info.forEach(function(item) {
item.toLowerCase() === i.toLowerCase() && (infoTemp[i] = info[i]);
});
};
params = params || {
domain: ""
};
var info = {
deviceType: MethodLibrary.getDeviceType(),
OS: MethodLibrary.getOS(),
OSVersion: MethodLibrary.getOSVersion(),
sh: _window.screen.height,
sw: _window.screen.width,
lang: MethodLibrary.getLanguage(),
netWork: MethodLibrary.getNetwork(),
orientation: MethodLibrary.getOrientationStatu(),
browserInfo: MethodLibrary.getBrowserInfo(),
fingerprint: MethodLibrary.createFingerprint(params.domain),
userAgent: null == (_VariableLibrary_navigator = VariableLibrary.navigator) ? void 0 : _VariableLibrary_navigator.userAgent
};
if (!params.info || 0 === params.info.length) return info;
var infoTemp = {};
for (var i in info) _loop(i);
return infoTemp;
}
}, {
getDeviceInfo: function(params) {
return LogicLibrary.DeviceInfoObj(params);
}
}), TaskQueue = function() {
function TaskQueue() {}
return TaskQueue.add = function(url, data) {
TaskQueue.queues.push({
url: url,
data: data
});
}, TaskQueue.fire = function() {
if (TaskQueue.queues && 0 !== TaskQueue.queues.length) {
TaskQueue.isStop = !1;
var item = TaskQueue.queues[0];
item.url && TaskQueue.api.report(item.data), TaskQueue.queues.splice(0, 1), TaskQueue.fire();
} else TaskQueue.isStop = !0;
}, TaskQueue;
}();
TaskQueue.isStop = !0, TaskQueue.queues = [];
var API = function() {
function API(url) {
this.url = url;
}
var _proto = API.prototype;
return _proto.report = function(data) {
this.checkUrl(this.url) && this.sendInfo(data);
}, _proto.sendInfo = function(data) {
var _navigator;
"function" == typeof (null == (_navigator = navigator) ? void 0 : _navigator.sendBeacon) ? this.sendBeacon(this.url, data) : this.sendImage(this.url, data);
}, _proto.sendImage = function(url, data) {
var paramsStr = this.changeJSON2Query(data), img = new Image;
img.onload = img.onerror = function() {
img = null;
}, img.src = url + "?" + paramsStr + "&random=" + Math.random();
}, _proto.sendBeacon = function(url, data) {
try {
navigator.sendBeacon(url, this.formatParamsByURLSearchParams(data));
} catch (error) {}
}, _proto.formatParamsByURLSearchParams = function(data) {
var form = new URLSearchParams;
for (var name in data) "object" == typeof data[name] && (data[name] = JSON.stringify(data[name])),
form.append(name, data[name]);
return form;
}, _proto.changeJSON2Query = function(data) {
var args = "";
for (var i in data) {
"" != args && (args += "&");
var item = data[i];
args += i + "=" + encodeURIComponent("object" == typeof item ? JSON.stringify(item) : item);
}
return args;
}, _proto.checkUrl = function(url) {
return !!url && /^[hH][tT][tT][pP]([sS]?):\/\//.test(url);
}, API;
}();
function _extends() {
return _extends = Object.assign || function(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]);
}
return target;
}, _extends.apply(this, arguments);
}
return function() {
function Collect(options) {
this.options = options, this.extendsInfo = options.extendsInfo || {}, this.clientInfo = this._getDeviceInfo(),
TaskQueue.api = new API(options.url), this.changeUrl = this.changeUrl.bind(this);
}
var _proto = Collect.prototype;
return _proto.changeUrl = function(url) {
TaskQueue.api = new API(url);
}, _proto.send = function(params) {
return this.options.forbidden || "object" != typeof params || (this._handleRecordError(params),
TaskQueue.isStop && TaskQueue.fire()), this;
}, _proto.setForbidden = function(forbidden) {
this.options.forbidden = forbidden;
}, _proto.updateExtendsInfo = function(params) {
void 0 === params && (params = {}), this.extendsInfo = _extends({}, this.extendsInfo || {}, params);
}, _proto._handleRecordError = function(params) {
try {
var errorInfo = this._handleErrorInfo(params);
TaskQueue.add(this.options.url, errorInfo);
} catch (error) {}
}, _proto._handleErrorInfo = function(params) {
var extendsInfo = this._getExtendsInfo(), recordInfo = _extends({
st: (new Date).getTime()
}, extendsInfo, params);
return recordInfo.clientInfo = this.clientInfo, recordInfo;
}, _proto._getExtendsInfo = function() {
try {
var dynamicParams, ret = {}, extendsInfo = this.extendsInfo || {};
for (var key in "function" == typeof extendsInfo.getDynamic && (dynamicParams = extendsInfo.getDynamic()),
"[object Object]" === Object.prototype.toString.call(dynamicParams) && (extendsInfo = _extends({}, extendsInfo, dynamicParams)),
extendsInfo) "function" != typeof extendsInfo[key] && (ret[key] = extendsInfo[key]);
return ret;
} catch (error) {
return {};
}
}, _proto._getDeviceInfo = function() {
try {
var deviceInfo = DeviceInfo.getDeviceInfo();
return JSON.stringify(deviceInfo);
} catch (error) {
return "";
}
}, Collect;
}();
});