日常项目中常用函数的记录总结(二)

目录

1、判断是否ie浏览器

2、判断是否mobile端

3、判断是否苹果设备

4、判断是否是微信浏览器

5、SHA1 加密算法

6、CryptoJS加密算法

7、CryptoJS解密算法

8、判断是不是外链


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;
}
  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值