十年专注于品牌网站建设 十余年专注于网站建设_小程序开发_APP开发,低调、敢创新、有情怀!
南昌百恒网络微信公众号 扫一扫关注
小程序
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络微信小程序

百恒网络

南昌百恒网络

Windows操作系统各个版本识别方法Javascript

百恒网络 2013-07-12 6519

Windows是我们最常见平台,也是使用最为广泛的平台,因此南昌网站设计公司单独将这如何识别Windows各种版本进行详细的说明和介绍,也希望此文对广大网站建设公司技术人员有所帮助.上一篇文章我介绍了识别不同平台Window、Mac、Unix(Linux)方法,接下来我们进行详细的分析:

在Windows平台下,还可以从用户代理字符串中进一步取得具体的操作系统信息。在Windows XP之前,Windows有两种版本,分别针对家庭用户和商业用户。针对家庭用户的版本分别是Windows 95、98和Windows ME。而针对商业用户的版本则一直叫做Window NT,最后由于市场原因改名为Windows2000。这两个产品线后来又合并成一个由Windows NT发展而来的公共的代码基,代表产品就是Windows XP。随后,微软在Windows XP基础上又构建了Windows Vista。

只有了解这些信息,才能搞清楚用户代理字符串中Windows操作系统的具体版本。下表列出了不同浏览器在表示不同的Windows操作系统时给出的不同字符串。

windows版本 IE4+ Gecko Opera<7 0pera7+ WebKit

95 " Windows 95" "Win95" "Windows 95" "Windows 95 n/a

98 "Windows 98" "Win98" Windows 98" "Windows 98" n/a

NT 4.0 "Windows NT" "WinNT4.O" "Windows NT 4.O" "Windows NT 4.0" n/a

2000 "Windows NT 5.0" "Windows NT 5.O" "Windows 2000" "Windows NT 5.O" n/a

IE "Win 9x 4.90" "Win 9x 4.90" "Windows ME" "Win 9x 4.90" n/a

XP "Windows NT 5.1" "Windows NT 5.1" "Windows XP" "Windows NT 5.1" "Windows NT 5.1"

Vista "Windows NT 6.0" "Windows NT 6.0" n/a "Windows NT 6.0" "Windows NT 6.0"

由于用户代理字符串中的Windows操作系统版本表示方法各异,因此检测代码并不十分直观。好在,从Windows 2000开始,表示操作系统的字符串大部分都还相同,只有版本号有变化。为了检测不同的Windows操作系统,必须要使用正则表达式。由于使用Opera 7之前版本的用户已经不多了,因此我们可以忽略这部分浏览器。

第一步就是匹配Windows 95和Windows 98这两个字符串。对这两个字符串,只有Gecko与其他浏览器不同,即没有"dows",而且"Win"与版本号之间没有空格。要匹配这个模式,可以使用下面这个简单的正则表达式:

/Win(?:dows)?([^do](2))/

这个正则表达式中的捕获组会返回操作系统的版本。由于版本可能是任何两个字符编码(例如95、98,9x、NT、ME及XP),因此要使用两个非空格字符。

Gecko在表示Windows NT时会在末尾添加"4.O",与其查找实际的字符串,不如像下面这样查找小数值更合适:

/Win(?:dows)?([^do](2))(d+.d+)?/

这样,正则表达式中就包含了第二个捕获组,用于取得NT的版本号。由于该版本号对于Windows95和Windows 98而言是不存在的,所以必须设置为可选。这个模式与Opera表示Windows NT的字符串之间唯一的区别,就是"NT"与“4.o"之间的空格,这在模式中很容易添加:

/Win(?:dows)?([^do](2))87(d+.d+)?/

经过一番修改之后,这个正则表达式也可以成功地匹配Windows ME、Windows XP和WindowsVista的字符串了。具体来说,第一个捕获组将会匹配95、98、9x、NT、ME或XP。第二个捕获组则只针对Windows ME及所有Windows NT的变体。这个信息可以作为具体的操作系统信息保存在

system.win属性中,如下所示:

if (system.win){

if (/Win(?:dows)?([^do]{2})s?(d+.d+)?/.test (ua)){

if (RegExp["$1"]=="NT"){

switch (RegExp["$2"]){

case "5.0":

system.win="2000";

break;

case "5.1":

system.win= "XP";

break:

case "6.0":

system.win="Vista";

break:

default:

system.win="NT";

break;

} else if (RegExp["$1"]==“9x"){

system.win="ME";

} else{

system.win=RegExp["$1"];

)

)

}

如果system.win的值为true,那么就使用这个正则表达式从用户代理字符串中提取具体的信息。鉴于Windows将来的某个版本也许不能使用这个方法来检测,所以第一步应该先检测用户代理字符串是否与这个模式匹配。在模式匹配的情况下,第一个捕获组中可能会包含"95"、"98"、"9x"或"NT"。如果这个值是"NT",可以将system.win设置为相应操作系统的字符串;如果是n9x",那么system.win就要设置成"ME";如果是其他值,则将所捕获的值直接赋给sys七em.win。有了这些检测平台的代码后,我们就可以编写如下代码:

if(client.system.win){

if(client.system.win=="XP") {

//说明是XP

} else if (client.system .win=="Vista"){

//说明是Vista

}

}

由于非空字符串会转换为布尔值true,因此可以将client.system.win作为布尔值用在if语句中。而在需要更多有关操作系统的信息时,则可以使用其中保存的字符串值。

本文仅限内部技术人员学习交流,不得作于其他商业用途.文章出自:南昌网站建设公司-百恒网络 http://www.jxbh.cn 如转载请注明出处!

400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络小程序

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
售后服务 售后服务
 
备案专线 备案专线
 
×