/*方法*/
var Method = {
// 人数
setCookieNum: function (name, value, perpetual) {
let exdate = new Date();
exdate.setDate(exdate.getDate() + perpetual);
document.cookie = name + '=' + value + ';expires=' + exdate.toGMTString() + ";path=/";
//永久有效
//document.cookie = name + '=' + value + ';expires=' + 'Fri, 31 Dec 9999 23:59:59 GMT'
},
// 删除cookie
delCookieNum: function (key, pravite) {
Method.setCookieNum(key, '', -1, pravite);
},
setCookie: function (searchWord, val, time) {
var value = val;
var arr = document.cookie.match(new RegExp('(^| )' + searchWord + '=([^;]*)(;|$)')); //获取之前存的内容
var expiresDays = time ? time : 1;
var date = new Date();
date.setTime(date.getTime() + expiresDays * 24 * 3600 * 1000);
if (arr) {
var cookieContext = unescape(arr[2]);
cookieContext += "&" + escape(value); //escape() 编码
document.cookie = searchWord + '=' + escape(cookieContext) + '; expires=' + date
.toGMTString() + ";path=/";
} else {
document.cookie = searchWord + '=' + escape(value) + '; expires=' + date.toGMTString() +
";path=/";
}
},
// 获取cookie
getCookie: function (key) {
var getCookie = document.cookie.replace(/[ ]/g, "");
var arrCookie = getCookie.split(";")
var tips;
for (var i = 0; i < arrCookie.length; i++) {
var arr = arrCookie[i].split("=");
if (key == arr[0]) {
tips = arr[1];
break;
}
}
return tips;
},
// 删除cookie
delCookie: function (key, pravite) {
Method.setCookie(key, '', -1, pravite);
},
// 设置localstorage
setLocalStore: function (key, value, isObj) {
var checkedIdStr = '';
if (isObj) {
checkedIdStr = JSON.stringify(value);
} else {
checkedIdStr = value;
}
localStorage.setItem(key, checkedIdStr);
},
// 获取localstorage
getLocalStore: function (key, notparse) {
var objJSON = localStorage.getItem(key)
return notparse ? objJSON : JSON.parse(objJSON);
},
// 获取url参数
getQueryVariable: function (variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
return '';
},
// 浏览器指纹
finger: function () {
// 获取浏览器 User Agent 信息
var userAgent = navigator.userAgent;
// 获取浏览器 Accept Headers 信息
var acceptHeaders = navigator.acceptHeader;
// 获取屏幕分辨率
var screenWidth = screen.width;
var screenHeight = screen.height;
// 获取时区偏移量
var timezoneOffset = new Date().getTimezoneOffset();
// 创建一个 Canvas 元素
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
// 绘制一个图像,并获取图像数据的哈希值
var text = 'fingerprint';
ctx.textBaseline = "top";
ctx.font = "14px 'Arial'";
ctx.textBaseline = "alphabetic";
ctx.fillStyle = "#f60";
ctx.fillRect(125, 1, 62, 20);
ctx.fillStyle = "#069";
ctx.fillText(text, 2, 15);
ctx.fillStyle = "rgba(102, 204, 0, 0.7)";
ctx.fillText(text, 4, 17);
var canvasData = canvas.toDataURL();
var canvasHash = hash(canvasData);
// 获取本地 IP 地址和端口号
var rtcPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window
.webkitRTCPeerConnection;
if (rtcPeerConnection) {
var pc = new rtcPeerConnection({
iceServers: []
});
pc.createDataChannel("");
pc.createOffer(function (result) {
pc.setLocalDescription(result, function () { }, function () { });
}, function () { });
pc.onicecandidate = function (event) {
if (event && event.candidate && event.candidate.candidate) {
var address = event.candidate.candidate.split(' ')[4];
var port = event.candidate.candidate.split(' ')[5];
var ip = address.split(':')[0];
}
};
}
// 整合上述信息生成浏览器指纹
var fingerprint = userAgent + acceptHeaders + screenWidth + screenHeight + timezoneOffset +
canvasHash;
// 计算哈希值
function hash(str) {
var hash = 0;
for (var i = 0; i < str.length; i++) {
var char = str.charCodeAt(i);
hash = ((hash << 5) - hash) + char;
hash = hash & hash;
}
return hash;
}
return CryptoJS.MD5(fingerprint).toString();
},
// 唯一值
generateUUID: function () {
var d = new Date().getTime();
if (typeof performance !== 'undefined' && typeof performance.now === 'function') {
d += performance.now(); // 使用性能数据来增加唯一性
}
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
},
detectMobile: function () {
const ua = navigator.userAgent.toLowerCase();
if (/mobile|android|iphone|ipad|phone/i.test(ua)) {
return 'Mobile';
} else {
return 'PC';
}
},
};
注意:使用finger()时,需要引入crypto-js-4.0.0.min.js