`

navigator 判断浏览器

阅读更多

The navigator object

The navigator object was conceived back in the days when Netscape Navigator reined supreme. These days it serves as much as an irony of NS's diminished market share as way of probing browser information.

The navigator object of JavaScript contains the following core properties:

Properties Description
appCodeName The code name of the browser.
appName The name of the browser (ie: Microsoft Internet Explorer ).
appVersion Version information for the browser (ie: 4.75 [en] (Win98; U) ).
cookieEnabled Boolean that indicates whether the browser has cookies enabled.
language Returns the default language of the browser version (ie: en-US ). NS and Firefox only.
mimeTypes[] An array of all MIME types supported by the client. NS and Firefox only.
platform[] The platform of the client's computer (ie: Win32 ).
plugins An array of all plug-ins currently installed on the client. NS and Firefox only.
systemLanguage Returns the default language of the operating system (ie: en-us ). IE only.
userAgent String passed by browser as user-agent header. (ie: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) )
userLanguage Returns the preferred language setting of the user (ie: en-ca ). IE only.

Let's see exactly what these properties reveal of the browser you're currently using :

<!----> <script type="text/javascript"> with (document){ write("<b>appCodeName:</b> "+navigator.appCodeName+"<br />") write("<b>appName:</b> "+navigator.appName+"<br />") write("<b>appVersion:</b> "+navigator.appVersion+"<br />") write("<b>userAgent:</b> "+navigator.userAgent+"<br />") write("<b>platform:</b> "+navigator.platform+"<br />") } </script> appCodeName: Mozilla
appName: Netscape
appVersion: 5.0 (Windows; en-US)
userAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3
platform: Win32
<!---->

At a glance

At a glance at the above table, you may be swayed towards turning to the following two properties to do your browser detection bidding:

navigator.appName
navigator.appVersion

After all, you are trying to detect a browser's name and version right? However, they both will most likely mislead you. In browsers such as various versions of Netscape and Firefox, these two properties return simply "Netscape" for appName , and 5.0 for appVersion without any further distinction for Firefox and its version, and hence are pretty much useless in the real world. For example, in both Firefox 1.x and Firefox 2.x, these two properties return:

appName:
 Netscape
appVersion:
 5.0 (Windows; en-US)

We need to turn to a property that's more thorough in its investigative work if we want more consistency and accuracy, and that turns out to be navigator.userAgent .

Detecting Firefox x.x

In Firefox 2.0.0.13 for example, the userAgent property reads:

UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13

The detail we're interested in apparently lies at the very end, or Firefox/2.0.0.13 . Different versions of Firefox will contain a different version number, but the pattern is consistent enough. The part we're interested in occurs after the string "Firefox/ ", or the exact version number. There are many ways to get to it using either standard String or RegExp methods- I'm opting for the later here:

<script type="text/javascript">

if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);
 var ffversion=new Number(RegExp.$1) // capture x.x portion and store as a number
 if (ffversion>=3)
  document.write("You're using FF 3.x or above")
 else if (ffversion>=2)
  document.write("You're using FF 2.x")
 else if (ffversion>=1)
  document.write("You're using FF 1.x")
}
else
 document.write("n/a")

</script>

Output: <!----> <script type="text/javascript"> if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);  var ffversion=new Number(RegExp.$1) // capture x.x portion and store as a number  if (ffversion>=3)   document.write("You're using FF 3.x or above")  else if (ffversion>=2)   document.write("You're using FF 2.x")  else if (ffversion>=1)   document.write("You're using FF 1.x") } else  document.write("n/a") </script> You're using FF 3.x or above<!---->

Basically, I'm capturing just the versonMajor.versionMinor portion of the full version number of Firefox (ie: 2.0.0.13 becomes simply 2.0), and using that as basis to detect the various versions of Firefox. Delving any deeper, and the returned version may no longer be a number but a string (ie: 2.0.0), which makes numeric comparisons cumbersome.

Detecting IE x.x

In IE 7.0 for example, the userAgent property reads:

UserAgent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)

So the part we're interested in lies in the middle, or MSIE 7.0; . If you try a shortcut and use parseFloat on the entire string to get to the 7.0 portion, it won't work. This is due to the way parseFloat works- by returning the first number it encounters, which in this case is 4.0. Once again we need to use either standard String or RegExp methods again to get to the actual version number; below I'm using RegExp as well:

<script type="text/javascript">

if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
 var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number
 if (ieversion>=8)
  document.write("You're using IE8 or above")
 else if (ieversion>=7)
  document.write("You're using IE7.x")
 else if (ieversion>=6)
  document.write("You're using IE6.x")
 else if (ieversion>=5)
  document.write("You're using IE5.x")
}
else
 document.write("n/a")
</script>

Output: <!----> <script type="text/javascript"> if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;  var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number  if (ieversion>=8)   document.write("You're using IE8 or above")  else if (ieversion>=7)   document.write("You're using IE7.x")  else if (ieversion>=6)   document.write("You're using IE6.x")  else if (ieversion>=5)   document.write("You're using IE5.x") } else  document.write("n/a") </script> n/a<!---->

Detecting Opera x.x

Detecting Opera using the navigator object at first appears to be tricky business due to the browser's identity crisis. You see, Opera 8 and below by default identifies itself as IE6 (or lower) in the navigator object. Users can override this setting under "Edit Site Settings " in the toolbar to identify as Opera or even another browser instead. Starting in Opera 9, the browser regains its confidence and identifies by default as itself, Opera, though users can still modify this setting manually in the toolbar. The bottom line is, Opera can appear as either Opera, Internet Explorer, or another browser within a designated list in the navigator object.

Lets take a look at what navigator.userAgent in Opera 8.5 returns depending on what it has chosen to identify itself as (whether automatically or manually):

As IE6: Mozilla/4.0 (compatible; MSIE 6.0; Windows XP) Opera 8.5 [en]
As Moz5: Mozilla/5.0 (Windows XP; U) Opera 8.5 [en]
As Opera: Opera/8.5 (Windows XP; U) [en]

Notice how if it's set to identify as IE, MSIE 6.0 appears within the string, while if set to identify as Mozilla, Mozilla/5.0 appears instead. As Opera itself, Opera/8.5 appears. In all three cases, the one commonality that we can exploit to actually detect Opera and its true version regardless of which identify it's decided to take on is the string "Opera x.x " or "Opera/x.x " within navigator.userAgent . In other words, there are two versions of the target string we need to be aware of. With that said, here's how you might go about testing for a specific version of Opera, which turns out to be no different than the technique used for detecting, say, Firefox:

<script type="text/javascript">
//Note: userAgent in Opera9.24 WinXP returns: Opera/9.24 (Windows NT 5.1; U; en)
//         userAgent in Opera 8.5 (identified as IE) returns: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 8.50 [en]
//         userAgent in Opera 8.5 (identified as Opera) returns: Opera/8.50 (Windows NT 5.1; U) [en]

if (/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ //test for Opera/x.x or Opera x.x (ignoring remaining decimal places);
 var oprversion=new Number(RegExp.$1) // capture x.x portion and store as a number
 if (oprversion>=10)
  document.write("You're using Opera 10.x or above")
 else if (oprversion>=9)
  document.write("You're using Opera 9.x")
 else if (oprversion>=8)
  document.write("You're using Opera 8.x")
 else if (oprversion>=7)
  document.write("You're using Opera 7.x")
 else
  document.write("n/a")
}
else
 document.write("n/a")
</script>

Output: <!----> <script type="text/javascript"> //Note: userAgent in Opera9.24 WinXP returns: Opera/9.24 (Windows NT 5.1; U; en) // userAgent in Opera 8.5 (identified as IE) returns: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 8.50 [en] // userAgent in Opera 8.5 (identified as Opera) returns: Opera/8.50 (Windows NT 5.1; U) [en] if (/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ //test for Opera/x.x or Opera x.x (ignoring remaining decimal places);  var oprversion=new Number(RegExp.$1) // capture x.x portion and store as a number  if (oprversion>=10) document.write("You're using Opera 10.x or above")  else if (oprversion>=9) document.write("You're using Opera 9.x")  else if (oprversion>=8) document.write("You're using Opera 8.x")  else if (oprversion>=7) document.write("You're using Opera 7.x")  else document.write("n/a") } else  document.write("n/a") </script> n/a

分享到:
评论

相关推荐

    JS判断浏览器之Navigator对象.pdf

    JS判断浏览器之Navigator对象 js怎样区分浏览器的实现代码

    js判断浏览器版本以及浏览器内核的方法

    本文实例讲述了js判断浏览器版本以及浏览器内核的方法。分享给大家供大家参考。具体实现方法如下: js判断是否移动端及浏览器内核 var browser = { versions: function() { var u = navigator.userAgent; return...

    JS判断浏览器之Navigator对象

    JS判断浏览器之Navigator对象

    JS如何判断浏览器类型和详细区分IE各版本浏览器

    今天用到JS判断浏览器类型,于是就系统整理了一下,便于后期使用。 /* * 描述:判断浏览器信息 * 编写:LittleQiang_w * 日期:2016.1.5 * 版本:V1.1 */ //判断当前浏览类型 function BrowserType() { ...

    使用JS在浏览器中判断当前网络连接状态的几种方法

    使用JS在浏览器中判断当前网络状态的几种方法如下: 1. navigator.onLine 2. ajax请求 3. 获取网络资源 4. bind() 1. navigator.onLine 通过navigator.onLine判断当前网络状态: if(navigator.onLine){ ... }...

    js判断浏览器的环境(pc端,移动端,还是微信浏览器)

    今天突然看到一段很好的代码,分享给大家,顺便也给自己留个笔记,js判断浏览器的环境具体如下: 方法一: // 判断浏览器函数 function isMobile(){ if(window.navigator.userAgent.match(/(phone|pad|pod|...

    js判断是pc判断浏览器调用不同css样式

    function getBrowser() { var i = window.navigator.userAgent; var isChrome = i.indexOf("Chrome") && window.chrome; var issafari=i.indexOf("safari") && window....js判断不同浏览器内核调用不同css样式

    JavaScript判断浏览器及其版本信息

    本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧

    js/jquery判断浏览器类型的方法小结

    浏览器代码名称:navigator.appCodeName 浏览器名称:navigator.appName 浏览器版本号:navigator.appVersion 对Java的支持:navigator.javaEnabled() MIME类型(数组):navigator.mimeTypes 系统平台:navigator....

    JS判断浏览器类型与版本的实现代码

    下面列举一下常用的判断方法 1、判断浏览器是否为IE document.all ? ‘IE’ : ‘others’:在IE下document.all值为1,而其他浏览器下的值为0; navigator.userAgent.indexOf(“MSIE”)&gt;0 ? ‘IE’ : ‘others’:...

    js判断浏览器版本

    浏览器版本的判断,比较的简单,对新人很有帮助 var browser=navigator.appName var b_version=navigator.appVersion var version=parseFloat(b_version) [removed]("Browser name: "+ browser) [removed](...

    js检测浏览器版本 javascript检测浏览器

    因为360的流氓性质,现在已经在 navigator.userAgent 检测不到360浏览器的特征。只能使用其他办法。这里是我自己找的一种办法 。 缺点是对移动端浏览器设备没统计和测试过,有什么问题和建议可以在留言中补充,我...

    如何基于js判断浏览器版本

    这篇文章主要介绍了如何基于js判断浏览器版本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 浏览器类型判断 不考虑对 IE9 以下浏览器的判断 function ...

    JavaScript判断浏览器版本的方法

    因为业务需求,项目经理让我做一个判断当前浏览器是否是谷歌浏览器,并确定谷歌浏览器版本,不满足谷歌浏览器和版本就显示一个页面提示升级,满足条件就跳转到我们的一个项目,下面先来实现这个: 1.当前浏览器是否...

    移动端判断浏览器类型

    判断是否为Safari浏览器 判断微信环境以及其他类型 判断IOS/安卓 const u = navigator.userAgent; const isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); if (isiOS) { console.log('IOS') }else{ console....

    基于js实现判断浏览器类型代码实例

    工作中需要用到判断浏览器类型,网上找到的内容不怎么全,故在此进行一下总结。 一、不同浏览器及版本下User-Agent信息 待续…..欢迎补充 二、根据User-Agent信息进行判断 以下代码目前还判断不了win10下的edge //...

    JS判断浏览器类型与操作系统的方法分析

    本文实例讲述了JS判断浏览器类型与操作系统的方法。分享给大家供大家参考,具体如下: navigator.userAgent : userAgent 属性是一个只读的字符串,声明了浏览器用于 HTTP 请求的用户代理头的值。 navigator.platform...

    使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)

    可以通过判断浏览器的userAgent,用正则来判断手机是否是ios和Android客户端。 var u = navigator.userAgent; isAndroid = u.indexOf('Android') &gt; -1 || u.indexOf('Adr') &gt; -1, //android终端 isiOS = !!u....

    根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码

    既判断分辨率,也判断浏览器 重新完善代码,使之成为判断浏览器类型屏幕分辨率自动调用不同CSS的代码。 代码如下:[removed] &lt;!– if (window.navigator.userAgent.indexOf(“MSIE”)&gt;=1) { var IE1024=””; ...

Global site tag (gtag.js) - Google Analytics