前几天被问到如何检测浏览器类型,我突然发现我对此并不了解,之前的项目中也没有使用到过,只隐约记得通过一个自带的方法即可获取。所以今天特意来仔细补习一下。
核心:navigator.userAgent
1.正则表达式
2.引用外部库
3.判断浏览器的其他特性
一.首先讲一下navigator.userAgent
navigator.userAgent
是一个包含用户代理字符串(User Agent String)的属性,这个字符串提供了关于用户浏览器、操作系统和设备的信息。用户代理字符串的生成和传递涉及浏览器和服务器之间的通信过程。
用户代理字符串包含主要内容:
-用户浏览器
-操作系统
-设备信息
接下来从构成、生成原理、传递解析和局限性几个方面来讲解一下用户代理字符串:
1.1用户代理字符串的构成
- 浏览器名称和版本:标识浏览器的名称和版本号。【这个内容导致经常用于判断浏览器类型场景上!】
- 操作系统:标识用户使用的操作系统及其版本。
- 渲染引擎:标识浏览器使用的渲染引擎。
- 设备信息:标识设备类型(比如手机、平板、桌面)。
举个例子
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36
我们来分析一下这个例子用户代理字符串中包含了哪些信息呢
- Mozilla/5.0:兼容性标识符,表示兼容 Mozilla 的浏览器。
- (Windows NT 10.0; Win64; x64):操作系统信息,表示 Windows 10 64 位操作系统。
- AppleWebKit/537.36:渲染引擎,表示使用 WebKit 内核。
- (KHTML, like Gecko):表示兼容 Gecko 内核。
- Chrome/92.0.4515.107:浏览器名称和版本号,表示 Chrome 92。
- Safari/537.36:表示兼容 Safari 537.36。【这里注意,正则判断时,由于兼容性标识,也有可能chrome浏览器识别到safari字段】
1.2用户代理字符串的生成
- 浏览器内部生成:
-
- 浏览器在初始化时,根据其内置的信息和用户的操作系统,生成用户代理字符串。
- 这些信息通常在浏览器的配置文件中定义,浏览器开发者在开发时设定。
- 用户定制:
-
- 某些浏览器允许用户通过设置或扩展自定义用户代理字符串。用户可以修改用户代理字符串以伪装成不同的浏览器或设备。【这一点导致了他的不可靠性】
1.3用户代理字符串的传递(浏览器和服务端之间)
- HTTP 请求:
-
- 当用户访问网页时,浏览器会发送 HTTP 请求到服务器。在请求头中包含一个名为