浏览器内核与JavaScript Navigator 对象

  1. 浏览器内核分类
  2. Navigator对象简介
    1. userAgent属性
    2. js判断浏览器内核

浏览器内核即 rendering engine ,渲染引擎,负责解释网页语法并渲染网页,所以不同浏览器内核对网页渲染效果不同,才会有css hack来兼容不同浏览器,使其显示效果一致。

浏览器内核分类

  • Trident

也被称为“IE内核”
使用Trident内核的常见浏览器有:IE系列、360浏览器(IE内核+webkit双核,Trident为兼容模式)、windows phone 系统浏览器等

  • Gecko

也被称为FirFox内核,跨平台内核
使用Gecko内核的常见浏览器有:Mozilla FireFox等

  • Presto

Opera前内核,Opera 15及往后版本已改为Google Chrome的Blink内核

  • Webkit

Safari内核,Chrome内核原型
Webkit内核常见的浏览器有:傲游浏览器、Safari、Android系统浏览器(Android4.4及以后系统浏览器切换到了Chromium,内核是Blink)等

  • Blink

Google从webkit衍生出的自己的引擎,后由Google与Opera Software共同研发
Blink内核浏览器:Chrome(28及往后版本)、Opera(15及往后版本)、Yandex浏览器等

Navigator对象包含有关浏览器以及操作系统的信息。
对象常用属性有

  • appCodeName 返回浏览器的代码名
  • appMinorVersion 返回浏览器的次级版号
  • appName 返回浏览器的名称
  • appVersion 返回浏览器的平台和版本信息
  • oscpu 浏览器正在运行的操作系统平台
  • platform 返回运行浏览器的操作系统平台
  • userAgent 返回由客户机发送服务器的user-agent头部的值
  • plugins[] 是一个Plugin对象的数组,表示浏览器已经安装的插件

Navigator对象的方法

  • javaEnabled() 规定浏览器是否启用Java
  • taintEnabled() 规定浏览器是否启用数据污点

userAgent属性

userAgent 属性是一个只读的字符串,声明了浏览器用于 HTTP 请求的用户代理头的值,一般由navigator.appCodeName 的值之后加上斜线和 navigator.appVersion 的值构成的。
如:

Chrome

1
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36

FireFox

1
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0) Gecko/20100101 Firefox/39.0"

Safari

1
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18

Chrome开发者工具设备模拟器iPhone 6、iPad、Nexus

1
Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1

1
Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1
1
Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.23 Mobile Safari/537.36

所以利用userAgent可以判断当前浏览器内核、浏览器种类、移动端设备、以及操作系统

js判断浏览器内核

利用Navigator对象的userAgent属性判断浏览器内核

1
2
3
4
5
var ua = navigator.userAgent;
u.indexOf('Trient') > -1 //Trident内核
u.indexOf('Presto') > -1 //Presto内核
u.indexOf('AppleWebkit') > -1 //webkit内核以及基于webkit内核的Blink内核
u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1 //Gecko内核