认识浏览器

五大国际浏览器品牌:按照全球使用率排序

  • Google ChromeWindowsMacOSLinuxAndroidiOS
  • Apple SafariMacOSiOS
  • Mozilla FirefoxWindowsMacOSLinuxAndroidiOS
  • ASA OperaWindowsMacOSLinuxAndroidiOS
  • Microsoft Internet ExplorerMicrosoft EdgeWindows

国产常用浏览器品牌:按照国内使用率排序,大多基于开源项目Chromium进行开发

  • 微信浏览器
  • QQ浏览器
  • UC浏览器
  • 2345浏览器
  • 搜狗浏览器
  • 猎豹浏览器
  • 遨游浏览器
  • 百度浏览器:百度在2019年04月30日宣布停止服务
  • 其他浏览器:很多很多,数不清,我就不列出来了

实现功能

  • 判断用户浏览器使用系统和版本
  • 判断用户浏览器是桌面端还是移动端,显示对应的主题样式
  • 判断浏览器是Android端还是iOS端,跳转到对应的app下载链接
  • 判断用户浏览器的内核和在台用于统计用户设备平台分布区间
  • 判断用户浏览器的载体版本,用与提示更新信息

浏览器信息:按权重降序排序

  • 浏览器系统:所运行的操作系统,包含WindowsMacOSLinuxAndroidiOS
  • 浏览器平台:所运行的设备平台,包含Desktop桌面端、Mobile移动端
  • 浏览器内核:浏览器渲染引擎,包含WebkitGeckoPrestoTrident
  • 浏览器载体:五大浏览器品牌,包含ChromeSafariFirefoxOperaIexplore/Edge
  • 浏览器外壳:基于五大浏览器品牌的内核进行开发,再套一层自研技术的外壳,如国内众多浏览器品牌

获取UserAgent是否包含字段:判断是否包含系统、平台、内核、载体、外壳的特有字段

const testUa = regexp => regexp.test(ua);

获取UserAgent对应字段的版本

const testVs = regexp => (ua.match(regexp) + "").replace(/[^0-9|_.]/ig, "").replace(/_/ig, ".");

方案

按照权重(系统 + 系统版本 > 平台 > 内核 + 载体 + 内核版本 + 载体版本 > 外壳 + 外壳版本)根据系统、平台、内核、载体、外壳的特有字段来归类统一浏览器运行环境。

系统+系统版本

//系统
let system = "unknown";
if (testUa(/windows|win32|win64|wow32|wow64/ig)) {system = "windows"; //Windows系统
} else if (testUa(/macintosh|macintel/ig)) {system = "macos"; //Macos系统
} else if (testUa(/x11/ig)) {system = "linux"; //Linux系统
} else if (testUa(/android|adr/ig)) {system = "andriod"; //Android 系统
} else if (testUa(/ios|iphone|ipad|iwatch/ig)) {system = "ios"; // iOS系统
}
//系统版本
let systemVs = "unknown";
if (system ==="windows") { //windos版本if (testUa(/windos nt 5.0|windows 2000/ig)) {systemVs = "2000";} else if(testUa(/windows nt 5.1|windows xp/ig)){systemVs="xp";}else if(testUa(/windows nt 5.2|windows 2003/ig)){systemVs="2003";}else if(testUa(/windows nt 6.0|windows vista/ig)){systemVs="vista";}else if(testUa(/windows nt 6.1|windows 7/ig)){systemVs="7";}else if(testUa(/windows nt 6.2|windows 8/ig)){systemVs="8";}else if(testUa(/windows nt 6.3|windows 8.1/ig)){systemVs="8.1";}else if(testUa(/windows nt 10.0|windows 10/ig)){systemVs="10";}
}else if(system==="macos"){systemVs=testVs(/os x [\d._]+/ig);
}else if(system==="andriod"){systemVs=testVs(/andriod [\d._]+/ig);
}else if(system==="ios"){systemVs=testVs(/os [\d._]+/ig);
}

平台

//平台
let platform = "unknow";
if (system === "windows" || system === "macos" || system === "linux") {platform = "desktop"; //桌面端
} else if (system === "andriod" || system === "ios" || testUa(/mobile/ig)) {platform = "mobile"; //移动端
}

内核+载体

//内核+载体
let engine = "unknown";
let supporter = "unknown";
if (testUa(/applewebkit/ig) && testUa(/safsri/ig)) {engine = "webkit"; //webkit内核if (testUa(/edge/ig)) {supporter = "edge"; //Edge浏览器} else if (testUa(/opr/ig)) {supporter = "opr"; //Opera浏览器} else if (testUa(/chrome/ig)) {supporter = "chrome"; //Chrome浏览器} else {supporter = "safari"; //Safari浏览器}
} else if (testUa(/gecko/ig) && testUa(/firefox/ig)) {engine = "gecko"; //gecko内核supporter = "firefox"; //Firefox浏览器
} else if (testUa(/presto/ig)) {engine = "presto"; //presto 内核supporter = "opera"; //Opera 浏览器
} else if (testUa(/trident|compatible|msie/ig)) {engine = "trident"; //trident 内核supporter = "iexplore"; //IE 浏览器
}

内核版本+载体版本

//内核版本
let engineVs="unknown";
if(engine==="webkit"){engineVs=testVs(/applewebkit\/[\d.]+/ig);
}else if(engine==="gecko"){engineVs=testVs(/gecko\/[\d.]+/ig);
}else if(engine==="presto"){engineVs=testVs(/presto\/[\d.]+/ig);
}else if(engine==="trident"){engineVs=testVs(/trident\/[\d.]+/ig);
}
//载体版本
let supporterVs="unknown";
if(supporter==="chrome"){supporterVs=testVs(/chrome\/[\d.]+/ig)
}else if(supporter==="safari"){supporterVs = testVs(/verison\/[\d.]+/ig)}else if (supporter === "firefox") {supporterVs = testVs(/firefox\/[\d.]+/ig)} else if (supporter === "opera") {supporterVs = testVs(/opr\/[\d.]+/ig)} else if (supporter === "iexploer") {supporterVs = testVs(/(msie\/[\d.]+)|(rv:[\d.]+)/ig)} else if (supporter === "edge") {supporterVs = testVs(/edge\/[\d.]+/ig)}

外壳+外壳版本

//外壳+外壳版本
let shell="none";//外壳
let shellVs="unknown";
if(testUa(/micromessenger/ig)){shell="wechat"; //微信浏览器shellVs=testVs(/micromessenger\/[\d.]+/ig);
}else if(testUa(/qqbrowser/ig)){shell="qq";//QQ浏览器shellVs=testVs(/qqbrowser\/[\d.]+/ig);
} else if (testUa(/ubrowser/ig)) {shell = "uc"; //UC浏览器shellVs = testVs(/ubrowser\/[\d.]+/ig);
} else if (testUa(/2345explorer/ig)) {shell = "2345"; //2345浏览器shellVs = testVs(/2345explorer\/[\d.]+/ig);
} else if (testUa(/metasr/ig)) {shell = "sougou"; //搜狗浏览器
} else if (testUa(/lbbrowser/ig)) {shell = "liebao"; //猎豹浏览器
} else if (testUa(/maxthon/ig)) {shell = "maxthon"; //傲游浏览器shellVs = testVs(/maxthon\/[\d.]+/ig);
} else if (testUa(/bidubrowser/ig)) {shell = "baidu";shellVs = testVs(/bidubrowser [\d.]+/ig);
}

构造函数输出对象

将所有判断条件合并成一个对象输出,代码未优化。

  • ystem:系统
  • systemVs:系统版本
  • platform:平台
  • engine:内核
  • engineVs:内核版本
  • supporter:载体
  • supporterVs:载体版本
  • shell:外壳
  • shellVs:外壳版本
function BrowserType() {const ua = navigator.userAgent.toLowerCase();const testUa = regexp => regexp.test(ua);const testVs = regexp => (ua.match(regexp) + "").replace(/[^0-9|_.]/ig, "").replace(/_/ig, ".");// 接上以上if...else条件判断// ......// 获取到system、systemVs、platform、engine、engineVs、supporter、supporterVs、shell、shellVsreturn Object.assign({engine, // webkit gecko presto tridentengineVs,platform, // desktop mobilesupporter, // chrome safari firefox opera iexplore edgesupporterVs,system, // windows macos linux android iossystemVs}, shell === "none" ? {} : {shell, // wechat qq uc 2345 sougou liebao maxthon baidushellVs});
}

javascript判断浏览器当前运行环境相关推荐

  1. 如何用JavaScript判断前端应用运行环境(移动平台还是桌面环境)

    我们部署在某些云平台或者Web服务器上的前端应用,既可以用PC端浏览器访问,也可以用手机上的浏览器访问. 在前端应用里,有时候我们需要根据运行环境的不同做出对应处理.比如下面这段逻辑,如果判断出应用当 ...

  2. JavaScript判断浏览器类型及版本

    JavaScript判断浏览器类型及版本 你知道世界上有多少种浏览器吗?除了我们熟知的IE, Firefox, Opera, Safari四大浏览器之外,世界上还有近百种浏览器. 几天前,浏览器家族有 ...

  3. JavaScript判断浏览器类型及版本(新增谷歌的Chrome)

    来源:http://blog.tripdev.com/?tid=164 JavaScript是前端开发的主要语言,我们可以通过编写JavaScript程序来判断浏览器的类型及版本.JavaScript ...

  4. web前端知识集合——javascript基础篇之javascript背景历史和运行环境(一)

    前言:温故而知新,可以为长也!万变不离其宗,无论是现在web前端技术衍生出多么优秀,好用的框架,插件,都离不开这门语言的基础知识.掌握各种优秀的框架,插件,只是"善用工具的人",深 ...

  5. html判断是否在微信里打开,JavaScript判断浏览器内核,微信打开自动提示在浏览器打开...

    微信会屏蔽 URL 自定义的 scheme ,导致无法跳转手机中的浏览器.网上有一些工具类网站可以实现直接跳转浏览器,之后有机会我会整理一下.我们今天只讨论通过 JavaScript 判断是否在微信浏 ...

  6. javascript判断浏览器和终端类型,js如何区分手机、电脑终端和浏览器

    判断浏览器类型 复制代码代码如下: if ( window.sidebar && "object" == typeof( window.sidebar ) & ...

  7. JavaScript判断浏览器Flash Player信息

    今天研究了点Flex技术,做了一个小的Demo,在测试时发现经常报错,网上一查发现是浏览器Flash Player版本较低造成(需要10及其以上的版本)的,对此总结了一下借助JavaScript脚本判 ...

  8. JavaScript判断浏览器内核,微信打开自动提示在浏览器打开

    微信会屏蔽 URL 自定义的 scheme ,导致无法跳转手机中的浏览器.网上有一些工具类网站可以实现直接跳转浏览器,之后有机会我会整理一下.我们今天只讨论通过 JavaScript 判断是否在微信浏 ...

  9. JavaScript判断浏览器 Browser detect

    The script Copy this script into your JavaScript files. It works immediately, and you can query thre ...

最新文章

  1. 3764树上的异或值(自己研究的静态字典树)
  2. Vue指令篇_v-bind
  3. 使用Spring MVC时的常见错误
  4. HTML5 footer元素
  5. linux查看进程和终止进程
  6. MySQL 非空约束(NOT NULL)入门
  7. c#通讯录管理系统(女朋友版本)
  8. 自主导航:赋予移动机器人智能感知与运动的能力
  9. 解决:“证书错误,导航已阻止”
  10. 运动世界校园【夜神模拟器】5.30
  11. threw exception [Circular view path [index]: would dispatch back to the current handler URL [/index]
  12. 好的博客学习的地址【持续更新中】
  13. 超平面、半空间、多面体的辨析
  14. 月亮代表我的心计算机谱子,月亮代表我的心
  15. SimCLR v2 论文阅读
  16. OCPP1.6充电桩平台-海外版
  17. 【IT 常识】安装(Install)、部署(Deploy)、搭建(Setup)和配置(Configure、Set)的区别
  18. linux 开发设计软件,在Linux平台下开发和设计聊天软件
  19. 肝了4.5万字,手把手带你玩转JavaScript(建议收藏)
  20. 法国电商Cdiscount绑定连连跨境支付收款教程!

热门文章

  1. 会议信息 | BigBrain研讨会 September 21-23, CEST, 线上
  2. python中的对象是什么意思_python中什么是对象
  3. 叶问短线绝招之拨云见日
  4. Linux软件包管理和系统网络3
  5. 人民币贬值 ,对普通人、码农的影响
  6. CocosCreator解决微信网络并发数大于10的问题
  7. 安卓关于健身的代码_亲子运动健身新玩法,娱乐享瘦两不误,让孩子不再沉迷电子产品...
  8. 提高企业WiFi速度的快速简便的方法—Vecloud微云
  9. 锁定计算机好在下游戏吗,求一款能让电脑在某一时段锁定不能玩游戏的软件
  10. TL-R402M路由器恢复出厂设置方法