js判断浏览器类型

在实际开发中,会碰到部分业务场景需要判断浏览器类型做不同处理,例如处理下载文件的二进制流,获取到文件名后进行解密,由于火狐浏览器的处理与其他的不一样,所以需要进行判断是否为火狐浏览器,去做不同的解密处理
一、封装方法
目前只做浏览器判断,不做版本判断

const kUserAgent = {
  Opera: 'Opera',
  FF: 'FF',
  Chrome: 'Chrome',
  Safari: 'Safari',
  IE: 'IE',
};

const getUserAgent = () => {
  const { userAgent } = navigator; // 取得浏览器的userAgent字符串
  if (userAgent.indexOf('Opera') > -1) {
    // 判断是否Opera浏览器
    return kUserAgent.Opera;
  }
  if (userAgent.indexOf('Firefox') > -1) {
    // 判断是否Firefox浏览器
    return kUserAgent.FF;
  }
  if (userAgent.indexOf('Chrome') > -1) {
    // 判断是否为谷歌浏览器
    return kUserAgent.Chrome;
  }
  if (userAgent.indexOf('Safari') > -1) {
    // 判断是否Safari浏览器
    return kUserAgent.Safari;
  }
  if (
    userAgent.indexOf('compatible') > -1 &&
    userAgent.indexOf('MSIE') > -1 &&
    userAgent.indexOf('Opera') > -1
  ) {
    // 判断是否IE浏览器
    return kUserAgent.IE;
  }
  return '';
};

二、引入方法

import { getUserAgent, kUserAgent } from './util';

三、使用方法

// 处理下载文件的二进制流
const handleDownloadBlob = (res, fileName) => {
  let filename = fileName;
  if (!filename && res && res.headers && res.headers.get) {
    const contentDisposition = res.headers.get('content-disposition');
    if (contentDisposition) {
      const cdArr = contentDisposition.split('filename=');
      if (cdArr && cdArr.length > 0) {
        filename = cdArr[cdArr.length - 1];
        // 获取到文件名后 进行解密 (火狐浏览器的处理与其他的不一样)
        filename =
          getUserAgent() === kUserAgent.FF
            ? decodeURI(escape(filename))
            : decodeURI(filename);
      }
    }
  }
  if (res && res.blob) {
    res.blob().then(blob => {
      let a = document.createElement('a');
      const url = window.URL.createObjectURL(blob);
      if (filename) {
        a.href = url;
        a.download = filename;
        a.click();
        window.URL.revokeObjectURL(url);
        a = null;
      }
    });
  }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值