浏览器根对象navigator之客户端检测
Navigator的5个主要属性:
appName:Web浏览器的名称
appVersion:浏览器的版本号和其他版本信息
userAgent:浏览器在它的USER-AGENT HTTP标题中发送的字符串。该属性包含appName,appVersion属性的所有信息
appCodeName:浏览器的代码名
platform:客户浏览器所在的操作系统
1.1 特征检测
这个是针对要了解浏览器的具体哪一项信息或者具体支持哪一项特定功能来决定的检测方式。
非精确判断,但却最安全。我们只要知道它存在不存在就可以了。
打个比方,我们只要if(navigator.appName.indexOf("Netscape")!=-1){***}
而不要输出具体的浏览器的名称结果。
1.2 字符串检测
这种比较正规的了,虽然检测浏览器的型号和类型很困难而且很容易出现误差。比如五大主流浏览器的检测代码:
|
var ua = navigator.userAgent.toLowerCase(); var info={ ie:/msie/.test(ua)&&!/opera/.test(ua), op:/opera/.test(ua), sa:/version.*safari/.test(ua), ch:/chrome/.test(ua), ff:/gecko/.test(ua)&&!/webkit/.test(ua) }; |
IE的版本号(因为IE版本差异大,而且与操作系统绑定一般不能升级):下面的代码可以检测IE的版本号(不能检测IE11,微软就是喜欢搞事请):
|
function getIEVer() { var nu = navigator.userAgent; var a= nu.indexOf("MSIE"); return a<0 || parseFloat(nu.substring(a+5,nu.indexOf(";",a))); } alert(getIEVer()); |
客户端操作系统:
|
var isWin = (navigator.userAgent.indexOf("Win")!=-1) |
如果是windows操作系统,则返回TRUE。其他的是"Mac","X11","Linux"分别是Macintosh,UNIX,Linux。
下面给出全面的设备信息监测代码:
|
var browser={ versions:function(){ var u = navigator.userAgent, app = navigator.appVersion; return { trident: u.indexOf('Trident') > -1, //IE内核 presto: u.indexOf('Presto') > -1, //opera内核 webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核 gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') === -1,//火狐内核 mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端 ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端 android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器 iPhone: u.indexOf('iPhone') > -1 , //是否为iPhone或者QQHD浏览器 iPad: u.indexOf('iPad') > -1, //是否iPad webApp: u.indexOf('Safari') === -1, //是否web应该程序,没有头部与底部 weixin: u.indexOf('MicroMessenger') > -1, //是否微信 qq: u.match(/\sQQ/i) === " qq" //是否QQ }; }(), language:(navigator.browserLanguage || navigator.language).toLowerCase() }; //判断是否IE内核 if(browser.versions.trident){ alert("is IE"); } //判断是否webKit内核 if(browser.versions.webKit){ alert("is webKit"); } //判断是否移动端 if(browser.versions.mobile||browser.versions.android||browser.versions.ios){ alert("移动端"); } if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { //alert(navigator.userAgent); //苹果端 } else if (/(Android)/i.test(navigator.userAgent)) { //alert(navigator.userAgent); //安卓端 } else { //pc端 } var ua= navigator.userAgent.toLowerCase(); if(ua.match(/MicroMessenger/i) === "micromessenger") { alert("is wechat"); } |
浏览器根对象navigator之客户端检测的更多相关文章
- 浏览器根对象navigator之对象属性概览
第1章 connection[试验] navigator.connection 是只读的,提供一个NetworkInformation 对象来获取设备的网络连接信息.例如用户设备的当前带宽或连接是否被 ...
- 浏览器根对象window之performance
W3C性能小组引入的新的API,目前IE9以上的浏览器都支持. 为了解决当前性能测试的困难,W3C推出了一套性能API标准,各种浏览器对这套标准的支持如今也逐渐成熟起来.这套API的目的是简化开发者对 ...
- 浏览器根对象document之方法概述
1.1 节点 筛选 getRootNode返回上下文的根节点. querySelector返回文档中匹配指定 CSS 选择器的第一个元素. querySelectorAll返回文档中匹配指定 CSS ...
- 浏览器根对象window之Location
1. Location Location 对象包含有关当前 URL 的信息.Location 对象是 Window 对象的一个部分,可通过 window.location 属性来访问. 1.1 Loc ...
- 浏览器根对象document之字符串属性
1.1 停止使用的属性 fgColor.linkColor.vlinkColor.alinkColor.bgColor. 1.2 文档地址 document.URL 与documentURI属性返回同 ...
- 浏览器根对象window之事件
1. [事件]动画 onanimationstart onanimationend onanimationiteration onwebkitanimationend onwebkitanimatio ...
- 浏览器根对象window之操作方法
1.1 不常用 alert:带有一条指定消息和一个OK按钮的警告框. confirm:带有指定消息和OK及取消按钮的对话框. prompt:可提示用户进行输入的对话框. print:打印网页. ope ...
- 浏览器根对象window之caches
在控制台输入window. caches可输出一个叫做CacheStorage的对象,它用来存储 Response 对象的.也就是说用来对 HTTP ,响应做缓存的.虽然 localStorage 也 ...
- 浏览器根对象window之history
1. history(H5) Window.history保存用户在一个会话期间的网站访问记录,用户每次访问一个新的URL即创建一个新的历史记录. 1.1 length 返回浏览器历史列表中的 URL ...
随机推荐
- 【Java学习笔记】如何写一个简单的Web Service
本Guide利用Eclipse以及Ant建立一个简单的Web Service,以演示Web Service的基本开发过程: 1.系统条件: Eclipse Java EE IDE for Web De ...
- 扩展中国剩余定理(扩展CRT)详解
今天在$xsy$上翻题翻到了一道扩展CRT的题,就顺便重温了下(扩展CRT模板也在里面) 中国剩余定理是用于求一个最小的$x$,满足$x\equiv c_i \pmod{m_i}$. 正常的$CRT$ ...
- Numpy 创建数组2
Numpy数组除了可以使用底层 ndarray 构造器来创建外,也可以同伙一下集中方式来创建. numpty.empty numpy.empty方法用来创建一个指定形状(shaoe).数据类型(dty ...
- postman创建mocker Server
为了不影响前端开发的进度,一般后端都是先定数据结构,然后写个假接口让前端调用,这样前端就不必等着后端接口开发完成以后再开始了. 届时,前后端以及UI和测试就可以并行,待双方都把各自的逻辑写好了,便可以 ...
- (转)mysql5.7 根据二进制文件mysqlbinlog恢复数据库 Linux
原文:http://blog.csdn.net/qq_15058425/article/details/61196085 1.开始mysqlbinlog日志功能 先找打my.cnf文件的位置: 2.编 ...
- linux传输文件命令: rz 和 sz
参考: https://www.cnblogs.com/xiluhua/p/6218563.html https://blog.csdn.net/u014242496/article/details/ ...
- python的 del 函数是删对象还是删引用
1.首先介绍下python的对象引用 1)Python中不存在传值调用,一切传递的都是对象引用,也可以认为是传址调用.即Python不允许程序员选择采用传值或传引用.Python参数传递采用的是“传对 ...
- C# 基元类型
C#编程中,初始化一个整数有两种方式: (1).较繁琐的方法,代码如下: Int32 a = new Int32(); (2).极简的方法,代码如下: ; 对比两种方法,分析如下: 第一种:过于繁琐, ...
- Android_字符串转换
这个很简单,只是一个输入框,一个按钮,一个TextView用来显示转换后的字符串,按钮有一个事件,使用可视化操作界面下添加的,毕竟很方便嘛!
- Virtualbox下载与安装步骤
不多说,直接上干货! 本主主要介绍一下如何从官方网站下载正版的 虚拟化 Oracle VM VirtualBox ,以及说明一下去官方下载正版软件的重要性. 一.为了系统的稳定以及数据的安全,建议下载 ...