BOM之navigator对象和用户代理检测

前端之家收集整理的这篇文章主要介绍了BOM之navigator对象和用户代理检测前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前面的话

navigator对象现在已经成为识别客户端浏览器的事实标准,navigator对象是所有支持javascript的浏览器所共有的。本文将详细介绍navigator对象和用户代理检测

属性

与其他BOM对象的情况一样,每个浏览器中的navigator对象也都有一套自己的属性。下表列出了存在于所有浏览器中的属性方法,以及支持它们的浏览器版本

属性 说明

appCodeName 浏览器名称[所有浏览器都返回Mozilla]

userAgent 浏览器的用户代理字符串

appVersion 浏览器版本

appMinorVersion 次版本信息[IE返回0,chrome和firefox不支持]

platform 浏览器所在的系统平台[所有浏览器都返回Win32]

plugins 浏览器中安装的插件信息的数组

mimeTypes 在浏览器中注册的MIME类型数组

language 浏览器主语言[IE10-不支持,其他浏览器返回zh-CN]

systemLanguage 操作系统语言[IE返回zh-CN,chrome和firefox不支持]

userLanguage 操作系统默认语言[IE返回zh-CN,chrome和firefox不支持]

product 产品名称[IE10-不支持,其他浏览器返回Gecko]

productSub 产品次要信息[IE不支持,chrome返回20030107,firefox返回20100101]

vendor 浏览器品牌[chrome返回Google Inc.,IE和firefox不支持]

onLine 是否连接因特网[IE根据实际情况返回true或false,chrome和firefox始终返回true]

cookieEnabled 表示cookie是否启用[所有浏览器都返回true]

javaEnabled 是否启用java[IE8-浏览器返回{},其他浏览器返回function javaEnabled()]

buildID 浏览器编译版本[firefox返回20170125094131,chrome和IE不支持]

cpuClass 计算机使用的cpu类型[IE返回x86,chrome和firefox不支持]

oscpu 操作系统或使用的cpu[firefox返回Windows NT 10.0; WOW64,chrome和IE不支持]

检测插件

检测浏览器插件是一种最常见的检测例程

对于非IE浏览器,可以使用plugins数组来达到这个目的该数组中的每一项都包含下列属性

name:插件的名字 

description:插件的描述

filename:插件文件

length:插件所处理的MIME类型数量

通过循环迭代每个插件并将插件的name与给定的名字进行比较

-1){ return true; } } } //检测flash console.log(hasPlugin("Flash"));//true

对于IE浏览器,检测插件的办法是使用专有的ActiveXObject类型,并尝试创建一个特定插件的实例。IE是使用COM对象来实现插件的,而COM对象使用唯一标识符来标识。因此,想检查特定的插件就必须知道其COM标识符。例如,Flash的标识符是ShockwaveFlash.ShockwaveFlash

【兼容写法】

插件 function hasPlugin(name){ name = name.toLowerCase(); for(var i = 0; i < navigator.plugins.length; i++){ if(navigator.plugins[i].name.toLowerCase().indexOf(name) > -1){ return true; } } } //检测IE中的插件 function hasIEPlugin(name){ try{ new ActiveXObject(name); return true; }catch(ex){ return false; } } function hasFlash(){ var result = hasPlugin("Flash"); if(!result){ result = hasIEPlugin("ShockwaveFlash.ShockwaveFlash"); } return result; } console.log(hasFlash());//true

用户代理检测

navigator对象中最重要的作用就是使用useragent实现用户代理检测。用户代理检测是一种万不得已的做法,优先级排在前面介绍过的能力检测之后

发展历史

1、1993年美国NCSA国家超级计算机中心发布了世界上第一款web浏览器Mosaic,该浏览器的用户代理字符串为Mosaic/0.9

2、Netscape公司进入浏览器开发领域,将自己产品的代号定名了Mozilla(Mosaic Killer)的简写,用户代理字符串格式为Mozilla/版本号 [语言] (平台;加密类型)

3、IE赢得用户广泛认可的web浏览器IE3发布时,Netscape已经占据了绝对市场份额,为了让服务器能够检测到IE,IE将用户代理字符串修改成兼容Netscape的形式:Mozilla/2.0(compatible;MSIE版本号;操作系统)

4、各浏览器陆续出现,用户代理字符串的显示格式也越来越类似……

HTTP规范明确规定,浏览器应该发送简短的用户代理字符串,指明浏览器的名称和版本号。但现实中却没有这么简单,各浏览器的检测结果如下所示

检测结果

【IE3】

Mozilla/2.0 (compatible; MSIE3.02; windows 95)

【IE6】

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

【IE7】

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)

【IE8】

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)

【IE9】

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)

【IE10】

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)

【IE11】

Mozilla/5.0 (MSIE 9.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3; GWX:QUALIFIED; rv:11.0) like Gecko

【chrome】

Mozilla/5.0 (Windows NT 6.1; WOW64)G AppleWebKit/537.36 (KHTML,like Gecko) Chrome/45.0.2454.93 Safari/537.36

【safari】

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML,like Gecko) Version/5.1.7 Safari/534.57.2

【firefox】

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0

【opera】

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25

【ipad】

Mozilla/5.0 (iPad; cpu OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML,like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53

【iphone】

Mozilla/5.0 (iPhone; cpu iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML,like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4

【android】

Mozilla/5.0 (Linux; Android 4.2.2; GT-I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36

识别内核

常见的内核有Trident、Gecko和Webkit

[注意]因为Trident和Webkit的用户代理字符串中可能会出现like Gecko的字眼,所以最后再测Gecko

显示"Trident"

识别浏览器

【1】IE

IE3-IE10都可以通过MSIE的版本号来判断,因为有的IE11并不出现MSIE字符,且safari中也有rv字段,所以IE11需要通过rv后的版本号和Trident来配合判断

【2】chrome

【3】safari

【4】firefox

【5】opera

识别操作系统

使用navigator.platform检测操作系统更加简单,因为其可能包括的值为“Win32”、“Win64”、“MacPPC”、“MacIntel”、“X11”和"Linux i686"等,且在不同浏览器中是一致的

而通过navigator.userAgent可以来得到window系统的详细信息

内核版本 Windows XP -> 5.1 Windows Vista -> 6.0 Windows 7 -> 6.1 Windows 8 -> 6.2 Windows 8.1 -> 6.3 Windows 10技术预览版   -> 6.4 Windows 10.0       -> 10.0

识别移动端

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程之家!

原文链接:https://www.f2er.com/js/41829.html

猜你在找的JavaScript相关文章