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 如转载请注明出处!