十年专注于品牌网站建设 十年专注于品牌网站建设,低调、高逼格、有情怀的网络应用服务商!
南昌百恒网络微信公众号 扫一扫关注
小程序
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络微信小程序

百恒网络

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

南昌网页设计公司技术员 2013/7/12 5414

   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
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络小程序

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