var _hmt = _hmt || []; (function () { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?dd42562bd3e5b032660a309c39cd869d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); // 获取操作系统、浏览器信息 const userAgent = navigator.userAgent.toLowerCase(); function getInfoFromMappings(mappings) { for (const key in mappings) { if (userAgent.includes(key)) { return mappings[key]; } } return mappings['default'] || 'Unknown'; } const browserMappings = { 'opera': 'Opera', 'firefox': 'Firefox', 'chrome': 'Chrome', 'safari': 'Safari', 'msie': 'IE', 'edg': 'Edge', '360se': '360极速浏览器', 'sogou': '搜狗浏览器', 'qqbrowser': 'QQ浏览器', 'lbbrowser': '猎豹浏览器', 'default': 'Unknown', }; const osMappings = { 'windows nt 10.0': 'Windows 10', 'windows nt 6.3': 'Windows 8.1', 'windows nt 6.2': 'Windows 8', 'windows nt 6.1': 'Windows 7', 'windows nt 6.0': 'Windows Vista', 'windows nt 5.1': 'Windows XP', 'windows nt 5.0': 'Windows 2000', 'win': 'Windows', 'iphone': 'iPhone', 'mac': 'Mac', 'android': 'Android', 'linux': 'Linux', 'x11': 'Unix', 'unix': 'Unix', 'sunname': 'Unix', 'bsd': 'Unix', 'default': 'Unknown', }; function getBrowserInfo() { return getInfoFromMappings(browserMappings); } function getOsInfo() { return getInfoFromMappings(osMappings); } // 统计访问时间(秒) var timeSeconds = 0; // 定时器自增访问时间 window.setInterval(function () { timeSeconds++ }, 1000); // 保存时间戳用于签名 var timestamp = new Date().getTime().toString().substring(0, 10); // 每3分钟获取一次,当前时间戳 var secondTimer = setInterval(function () { timestamp = new Date().getTime().toString().substring(0, 10); }, 180000); // 初始化参数 let tjObj = { "pt": document.title, "pk": window.location.href, "cs": getOsInfo(), "cb": getBrowserInfo(), "agent": navigator.userAgent, "referer": document.referrer, "timevisit": '00:00:00', } //生产客户端浏览器指纹 function initFingerprintJS() { new Fingerprint2().get(function (visitorId, components) { getData(visitorId) getLoginUserData(visitorId) }); } // 玄机平台大点拼接数据 function getData(client_finger) { // 统计访问时间(秒) var seconds = 0; // 保存时间戳用于签名 var timestamp = new Date().getTime().toString().substring(0, 10); let time_millisec = new Date().getTime() // 定时器自增访问时间 window.setInterval(function () { seconds++ }, 1000); // 初始化参数 var obj = { "page_title": document.title, "page_link": window.location.href, "client_system": getOsInfo(), "client_browser": getBrowserInfo(), "client_finger": client_finger, "user_agent": navigator.userAgent, "referer": document.referrer, "version": "v3.0", "timevisit": '00:00:00', "action": "click", "ext": "", "timestamp": timestamp, "time_millisec": time_millisec, } // 每3分钟获取一次,当前时间戳 var timer = setInterval(function () { timestamp = new Date().getTime().toString().substring(0, 10); }, 180000); obj['timestamp'] = timestamp obj["timevisit"] = secondsFormat(seconds); // 签名 formData = enSignData(obj) doRequest(formData) } //官网登录用户数据打点 function getLoginUserData(visitorId){ tjObj['cv'] = visitorId; tjObj['timestamp'] = timestamp; tjObj["timevisit"] = secondsFormat(timeSeconds); // 签名 formData = enSignData(tjObj) navigator.sendBeacon("/web/record/hitUserLog", formData); } // 发送请求 function doRequest(formData) { if (navigator.sendBeacon) { navigator.sendBeacon("/web/record/hitlog", formData); } else { $.ajax({ type: "POST", processData: false, contentType: false, url: "/web/record/hitlog", data: formData, success: function (result) {}, error: function (e) {} }); } } //统计代码 (function () { function addLog({ url = '', method = 'GET', data = {} }) { $.ajax({ type: method, timeout: 5000, url: url, data: data, async: false }); } window.statistics = {}; window.statistics.addLog = addLog; })(); // 加密 function enSignData(obj) { // 拼接字符串 let md = ''; let secret = 'QIANXIN_API_4D0BBFAEBCB492FC@#$%&'; let data = new FormData(); // 按照键名进行排序 let sortKey = Object.keys(obj).sort(); for (let i = 0; i < sortKey.length; i++) { data.append(sortKey[i], obj[sortKey[i]]); md += sortKey[i].toString() + "=" + obj[sortKey[i]].toString() + "&"; } md = md.slice(0, -1); md += secret; // MD5 加密 let hash = md5(md); data.append("sign", hash.substring(3, 10)); return data } // 计算停留时间 function secondsFormat(s) { const formatTimeUnit = (unit) => (unit.toString().length > 1 ? unit : '0' + unit); const day = Math.floor(s / (24 * 3600)); const hour = Math.floor((s - day * 24 * 3600) / 3600); const minute = Math.floor((s - day * 24 * 3600 - hour * 3600) / 60); const second = s - day * 24 * 3600 - hour * 3600 - minute * 60; const formattedHour = formatTimeUnit(hour); const formattedMinute = formatTimeUnit(minute); const formattedSecond = formatTimeUnit(second); return `${formattedHour}:${formattedMinute}:${formattedSecond}`; }