目录
1、判断是否ie浏览器
// 判断是否ie浏览器
// userAgent:用户代理字符串,它表示用户的浏览器、操作系统和其他相关信息
export const isIEBrowser = (userAgent) => {
let version = '';
const userAgent = userAgent ? userAgent : navigator.userAgent;
const isIE =
userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1;
const isEdge = userAgent.indexOf('Edge') > -1 && !isIE;
const isIE11 =
userAgent.indexOf('Trident') > -1 && userAgent.indexOf('rv:11.0') > -1;
if (isIE) {
const reIE = new RegExp('MSIE (\\d+\\.\\d+);');
reIE.test(userAgent);
const fIEVersion = parseFloat(RegExp.$1);
if (fIEVersion === 7) {
version = 7;
} else if (fIEVersion === 8) {
version = 8;
} else if (fIEVersion === 9) {
version = 9;
} else if (fIEVersion === 10) {
version = 10;
} else {
version = 6; // IE版本<=7
}
} else if (isEdge) {
version = -2;
} else if (isIE11) {
version = 11;
} else {
version = -1;
}
return Boolean(version > 0);
};
2、判断是否mobile端
// 判断是否mobile端
// userAgent:用户代理字符串,它表示用户的浏览器、操作系统和其他相关信息
export const isMobile = (userAgent) => {
const realUserAgent = userAgent ? userAgent : navigator.userAgent
const flag = realUserAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
return Boolean(flag);
};
3、判断是否苹果设备
// 判断是否苹果设备
// userAgent:用户代理字符串,它表示用户的浏览器、操作系统和其他相关信息
export const isIOS = (userAgent) => {
const browserRule = /^.*((iPhone)|(iPad)|(Safari))+.*$/;
const u = userAgent ? userAgent : navigator.userAgent;
const result = { // 移动终端浏览器版本信息
trident: u.indexOf('Trident') > -1, // IE内核
presto: u.indexOf('Presto') > -1, // opera内核
webKit: u.indexOf('AppleWebKit') > -1, // 苹果、谷歌内核
// 火狐内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') === -1,
mobile: !!u.match(/AppleWebKit.*Mobile/i) || !!u.match(/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/),
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), // ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, // android终端或者uc浏览器
iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, // 是否为iPhone或者QQHD浏览器
iPad: u.indexOf('iPad') > -1, // 是否iPad
webApp: u.indexOf('Safari') === -1 // 是否web应该程序,没有头部与底部
};
return Boolean((browserRule.test(u)) && (result.iPhone || result.iPad || result.ios));
};
4、判断是否是微信浏览器
// 判断是否是微信浏览器
// userAgent:用户代理字符串,它表示用户的浏览器、操作系统和其他相关信息
export const isWeixin = (userAgent) => {
const realUserAgent = userAgent ? userAgent : navigator.userAgent;
const ua = realUserAgent .toLowerCase();
return !!Boolean(ua && ua.indexOf('micromessenger') != -1);
};
5、SHA1 加密算法
//SHA1 加密
// s:需要加密的数据
export const encodeUTF8function = (s) => {
var i, r = [],
c, x;
for (i = 0; i < s.length; i++)
if ((c = s.charCodeAt(i)) < 0x80) r.push(c);
else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F));
else {
if ((x = c ^ 0xD800) >> 10 == 0) //对四字节UTF-16转换为Unicode
c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000,
r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F));
else r.push(0xE0 + (c >> 12 & 0xF));
r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));
};
return r;
};
// 字符串加密成 hex 字符串
export const sha1 = (s) => {
var data = new Uint8Array(encodeUTF8function(s))
var i, j, t;
var l = ((data.length + 8) >>> 6 << 4) + 16,
s = new Uint8Array(l << 2);
s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer);
for (t = new DataView(s.buffer), i = 0; i < l; i++) s[i] = t.getUint32(i << 2);
s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8);
s[l - 1] = data.length << 3;
var w = [],
f = [
function () {
return m[1] & m[2] | ~m[1] & m[3];
},
function () {
return m[1] ^ m[2] ^ m[3];
},
function () {
return m[1] & m[2] | m[1] & m[3] | m[2] & m[3];
},
function () {
return m[1] ^ m[2] ^ m[3];
}
],
rol = function (n, c) {
return n << c | n >>> (32 - c);
},
k = [1518500249, 1859775393, -1894007588, -899497514],
m = [1732584193, -271733879, null, null, -1009589776];
m[2] = ~m[0], m[3] = ~m[1];
for (i = 0; i < s.length; i += 16) {
var o = m.slice(0);
for (j = 0; j < 80; j++)
w[j] = j < 16 ? s[i + j] : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1),
t = rol(m[0], 5) + f[j / 20 | 0]() + m[4] + w[j] + k[j / 20 | 0] | 0,
m[1] = rol(m[1], 30), m.pop(), m.unshift(t);
for (j = 0; j < 5; j++) m[j] = m[j] + o[j] | 0;
};
t = new DataView(new Uint32Array(m).buffer);
for (var i = 0; i < 5; i++) m[i] = t.getUint32(i << 2);
var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function (e) {
return (e < 16 ? "0" : "") + e.toString(16);
}).join("");
return hex;
};
6、CryptoJS加密算法
// CryptoJS加密算法
// 引入依赖
// data:需要加密的对象 key:加密需要的秘钥(统一数据的加密解密秘钥保持一致)
import CryptoJS from 'crypto-js';
export const cryptoJSEncode = ({
data = '',
key = '0123456789abcdefghijklmnopqrstuvwxyz'
}) => {
let resStr = '';
try {
const encJson = CryptoJS.AES.encrypt(JSON.stringify(data), key).toString()
const encData = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(encJson))
resStr = encData
} catch (err) {
resStr = ''
}
return data;
}
7、CryptoJS解密算法
// CryptoJS解密算法
// 引入依赖
// data:需要解密的对象 key:解密需要的秘钥(统一数据的加密解密秘钥保持一致)
import CryptoJS from 'crypto-js';
export const cryptoJSDecode = ({
data = '',
key = '0123456789abcdefghijklmnopqrstuvwxyz'
}) => {
let resStr = '';
try {
const decData = CryptoJS.enc.Base64.parse(data).toString(CryptoJS.enc.Utf8)
const decJson = CryptoJS.AES.decrypt(decData, key).toString(CryptoJS.enc.Utf8)
resStr = JSON.parse(decJson)
} catch (err) {
resStr = data
}
return resStr;
}
8、判断是不是外链
// 判断是不是外链
// externalLink:链接
export const isExternalLink = (externalLink) => {
// 结果对象
let result = {
// 是不是外链
isExtra: false,
// 外链连接
extraUrl: '',
// 非外链具体页面(最后一个/后的内容,首页是home)
webContent: '',
// 非外链的去除域名的全链接
webContentFull: '',
};
const url = externalLink ? externalLink : '';
let myurl = '';
// 获取当前网站域名
if (!window.location.origin) {
myurl = window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');
} else {
myurl = window.location.origin;
}
// 去除http/https协议相关
myurl = myurl.replace('http://', '');
myurl = myurl.replace('https://', '');
if (url) {
// 正则匹配获取传参链接的域名情况进行判断是不是外链
var regex = /.*\:\/\/([^\/]*).*/;
var match = url.match(regex);
if (match && match.length > 1) {
let newUrl = match[1];
if (newUrl !== myurl) {
result.isExtra = true;
result.extraUrl = match[1];
}
}
}
// 非外链情况
if (!result.isExtra) {
let finUrl = '';
let finUrl_1 = '';
let myurl = ''
// 获取域名
if (!window.location.origin) {
myurl = window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');
} else {
myurl = window.location.origin;
}
// 剔除域名相关
finUrl_1 = externalLink.replace(myurl, '');
finUrl_1 = finUrl_1.replace('http://', '');
finUrl_1 = finUrl_1.replace('https://', '');
finUrl = externalLink.replace(myurl, '');
finUrl = finUrl.replace('http://', '');
finUrl = finUrl.replace('https://', '');
// 获取非外链具体页面(最后一个/后的内容,首页是'')
const list_one = finUrl.split('?').filter(item => Boolean(item));
if (list_one && list_one.length > 0) {
const getWebUrl = list_one[0];
const list_two = getWebUrl.split('/').filter(item => Boolean(item));
if (list_two && list_two.length > 0) {
result.webContent = list_two[list_two.length - 1];
}
}
// 非外链的去除域名的全链接
result.webContentFull = finUrl_1 ? finUrl_1 : (externalLink ? '/' : externalLink);
// 非外链具体页面(最后一个/后的内容,首页是home)
result.webContent = result.webContent ?
(result.webContent === '/' ? 'home' : result.webContent) :
(externalLink && (finUrl === '' || finUrl === '/') ? 'home' : externalLink);
}
return result;
}