js公用方法

19 篇文章 0 订阅
14 篇文章 0 订阅
 /*方法*/
    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

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫叶&情缘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值