前面的话

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与给定的名字进行比较
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;
}
}
}
//检测flash
console.log(hasPlugin("Flash"));//true
对于IE浏览器,检测插件的办法是使用专有的ActiveXObject类型,并尝试创建一个特定插件的实例。IE是使用COM对象来实现插件的,而COM对象使用唯一标识符来标识。因此,想检查特定的插件就必须知道其COM标识符。例如,Flash的标识符是ShockwaveFlash.ShockwaveFlash
function hasIEPlugin(name){
try{
new ActiveXObject(name);
return true;
}catch(ex){
return false;
}
}
//检测Flash
console.log(hasIEPlugin("ShockwaveFlash.ShockwaveFlash"))//true
【兼容写法】
//检测非IE中的插件
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
function whichEngine(){
var ua = navigator.userAgent;
//Trident内核
if(/Trident/.test(ua)){
return "Trident";
}
//Webkit内核
if(/WebKit/.test(ua)){
return "WebKit";
}
//Gecko内核
if(/Gecko/.test(ua)){
return "Gecko";
}
}
console.log(whichEngine());//IE11下显示"Trident"
识别浏览器
【1】IE
IE3-IE10都可以通过MSIE的版本号来判断,因为有的IE11并不出现MSIE字符,且safari中也有rv字段,所以IE11需要通过rv后的版本号和Trident来配合判断
function isIE(){
var ua = navigator.userAgent;
//检测Trident引擎,IE8+
if(/Trident/.test(ua)){
//IE11+
if(/rv:(\d+)/.test(ua)){
return RegExp["$1"];
}
//IE8-IE10
if(/MSIE (\d+)/.test(ua)){
return RegExp["$1"];
}
}
//检测IE标识,IE7-
if(/MSIE (\d+)/.test(ua)){
return RegExp["$1"];
}
}
console.log(isIE());//只有IE会返回版本号,其他浏览器都返回undefined
【2】chrome
function isChrome(){
var ua = navigator.userAgent;
//先排除opera,因为opera只是在chrome的userAgent后加入了自己的标识
if(!/OPR/.test(ua)){
if(/Chrome\/(\S+)/.test(ua)){
return RegExp["$1"];
}
}
}
console.log(isChrome());//只有Chrome会返回版本号45.0.2454.93,其他浏览器都返回undefined
【3】safari
function isSafari(){
var ua = navigator.userAgent;
//先排除opera
if(!/OPR/.test(ua)){
//检测出chrome和safari浏览器
if(/Safari/.test(ua)){
//检测出safari
if(/Version\/(\S+)/.test(ua)){
return RegExp["$1"];
}
}
}
}
console.log(isSafari());//只有safari会返回版本号5.1.7,其他浏览器都返回undefined
【4】firefox
function isFireFox(){
if(/Firefox\/(\S+)/.test(navigator.userAgent)){
return RegExp["$1"];
}
}
console.log(isFireFox());//只有firefox会返回版本号40.0,其他浏览器都返回undefined
【5】opera
function isOpera(){
if(/OPR\/(\S+)/.test(navigator.userAgent)){
return RegExp["$1"];
}
}
console.log(isOpera());//只有opera会返回版本号32.0.1948.25,其他浏览器都返回undefined
识别操作系统
使用navigator.platform检测操作系统更加简单,因为其可能包括的值为“Win32”、“Win64”、“MacPPC”、“MacIntel”、“X11”和"Linux i686"等,且在不同浏览器中是一致的
而通过navigator.userAgent可以来得到window系统的详细信息
windows版本 -> 内核版本 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
function whichSyStem(){
var ua = navigator.userAgent;
var pf = navigator.platform;
if(/Mac/.test(pf)){
return "Mac";
}
if(/X11/.test(pf) || /Linux/.test(pf)){
return "Linux";
}
if(/Win/.test(pf)){
if(/Windows NT (\d+\.\d+)/.test(ua)){
switch(RegExp["$1"]){
case "5.0":
return "Windows 2000";
case "5.1":
return "Windows XP";
case "6.0":
return "Windows Vista";
case "6.1":
return "Windows 7";
case "6.2":
return "Windows 8";
case "6.3":
return "Windows 8.1";
case "6.4":
case "10.0":
return "Windows 10";
}
}
}
}
console.log(whichSyStem())//Windows 10
识别移动端
function whichMobile(){
var ua = navigator.userAgent;
if(/iPhone OS (\d+_\d+)/.test(ua)){
return 'iPhone' + RegExp.$1.replace("_",".");
}
if(/iPad.+OS (\d+_\d+)/.test(ua)){
return 'iPad' + RegExp.$1.replace("_",".")
}
if(/Android (\d+\.\d+)/.test(ua)){
return 'Android' + RegExp["$1"];
}
}
console.log(whichMobile())//Android 5.1
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# navigator
# JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
# Javascript之BOM(window对象)详解
# JavaScript 浏览器对象模型BOM使用介绍
# javascript学习笔记(三)BOM和DOM详解
# javascript bom是什么及bom和dom的区别
# Javascript基础知识(三)BOM
# DOM总结
# Javascript BOM学习小结(六)
# 实现JavaScript的组成----BOM和DOM详解
# javascript的BOM汇总
# 你真的了解BOM中的history对象吗
# 不支持
# 操作系统
# 器中
# 自己的
# 是一种
# 也有
# 出了
# 世界上
# 最重要
# 万不得已
# 可以通过
# 却没有
# 并将
# 也都
# 已经成为
# 为其
# 详细介绍
# 可以使用
# 实际情况
# 美国
相关文章:
nginx修改上传文件大小限制的方法
如何彻底删除建站之星生成的Banner?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
高防服务器租用指南:配置选择与快速部署攻略
浅谈Javascript中的Label语句
C#怎么创建控制台应用 C# Console App项目创建方法
如何在腾讯云服务器上快速搭建个人网站?
建站主机如何安装配置?新手必看操作指南
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
,柠檬视频怎样兑换vip?
如何在七牛云存储上搭建网站并设置自定义域名?
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何基于云服务器快速搭建个人网站?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
建站之星安装失败:服务器环境不兼容?
青岛网站建设如何选择本地服务器?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
高防服务器如何保障网站安全无虞?
内部网站制作流程,如何建立公司内部网站?
如何在VPS电脑上快速搭建网站?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
如何用VPS主机快速搭建个人网站?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
教学论文网站制作软件有哪些,写论文用什么软件
?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
Python多线程使用规范_线程安全解析【教程】
如何在建站之星网店版论坛获取技术支持?
焦点电影公司作品,电影焦点结局是什么?
建站之星后台管理:高效配置与模板优化提升用户体验
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
,怎么用自己头像做动态表情包?
如何通过NAT技术实现内网高效建站?
山东云建站价格为何差异显著?
制作网站公司那家好,网络公司是做什么的?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
海南网站制作公司有哪些,海口网是哪家的?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
如何配置IIS站点权限与局域网访问?
*请认真填写需求信息,我们会在24小时内与您取得联系。