zoukankan      html  css  js  c++  java
  • 8、检测浏览器和操作系统

    8.1 navigator对象

    bom提供的最早对象之一,提供了浏览器的信息属性。

    8.2 检测浏览器的方式
    一般有两种检测方式:1、对象/特征检测 2、user-agent字符串检测。

    8.2.1对象/特征检测法
    对象检测涉及到,在使用一个给定对象之前要先检查它的存在。例如要使用DOM方法
    document.getElementById(),但不确定浏览器是不是支持它。
    if(document.getElementById){
    //the method exists, so use it here
    }else{
    // do something else
    }

    如果属性或方法不存在就会返回undefined。Boolean的false。

    注意检查函数是否存在,不能加括号。如果加了括号,解释器就会调用函数,函数不存在就
    会错误。

    8.2.2 user-agent字符串检测法

    访问网站的程序都必须提供一个user-agent字符串来向服务器确定它的身份。服务可以通过
    $ENV['HTTP_USER_AGENT']来访问。
    javascript navigator对象的属性userAgent属性来提供客户端对user-agent字符串的访问。
    var sUserAgent = navigator.userAgent;

    8.3 user-agent字符串简史
    Netscape navigator 3.0 /ie 3.0

    if(parseFloat(navigator.appVersion)>=3){
    //do 3.0-levelstuff here
    }

    因为ie
    if(navigator.userAgent.indexOf("MSIE")>-1){
    if(navigator.userAgent.indexOf("MSIE 3.")>-1){
    //do IE 3.0 browser stuff here
    }
    }else if(parseFloat(navigator.appVersion>=3)){
    //do other 3.0 browser stuff here
    }

    var isWin95 = navigator.userAgent.indexOf("Win95") > -
    1||navigator.userAgent.indexOf("Windows 95") > -1;

    8.3.2 ie4 nn4

    Netscape:

    Mozilla/AppVersion (Platform; Security [; OS-or-CPU-Description])
    Mozilla/4.0 (Win98;I)

    IE4.0

    Mozilla/4.0 (compatible; MSIE [IEVersion];[OS])
    Mozilla/4.0 (compatible; MSIE 4.0;Windows 98)

    if(parseFloat(navigator.appVersion) >=4){
    //do 4.0-level stuff here
    }

    8.3.3 IE 5.0 及更高版本

    IE 5.0 user-agent字符串:
    Mozilla/4.0 (compptible; MSIE 5.0; Windows NT)
    Mozilla 的版本还是4.0,虽然ie版本更新了。

    这个问题在IE 5.5和6.0版本依然如故。
    Mozilla/4.0(compatible; MSIE 6.0; Windows NT)

    8.3.4 Mozilla
    作为Netscape 6开发的一部分,开发人员起草了一份简短的文档作为 user-agent字
    符串的标准。新的格式代表了它首次同Netscape 原来的 user-agent字符串格式的分离。

    Mozilla/MozillaVersion(Platform; Security;Os-or-CPU; Localization information?[;
    PrereleaseVersion] * [; Oprional Other Comments]) Gecko/GeckoVersion
    [ApplicationProduct/ApplicationProductVersion]

    图 user-agent各个字符串。

    windows xp的Netscape 6.2.1的例子:
    Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:0.9.4) Gecko/20011128
    Netscape6/6.2.1

    8.3.5 Opera

    Opera user-agent 格式很独特。 基本格式:
    Opera/AppVersion(OS; Security)[Language]

    windows xp上使用Opera 7.54,user-agent 字符串:
    Opera/7.54 (Windows NT5.1; U )[en]

    仅仅使用菜单的功能,opera只要更改它所报告的user-agent字符串以及调整它的一些其他特
    征就可以办到这一点。(伪装成ie和Mozilla版本).

    Opera 伪装成Mozilla 5.0时,它返回这样的user-agent字符串:
    Mozilla/5.0(Windows NT 5.1; U) Opera 7.54
    伪装成Mozilla 4.78 user-agent:
    Mozilla/4.78 (Windows NT 5.1; U) Opera 7.54
    伪装成IE6.0,user-agent字符串就变成这样:
    Mozilla/4.0 (compatiable; MSIE6.0; Windows NT 5.1) Opera 7.54

    8.3.6 Safari
    Safari 的 user-agent 基本格式:
    Mozilla/5.0 (Platform; Security;Os-or-CPU;Language)
    AppleWebKit/AppleWebKitVersion(KHTML,like Gecko) SafariVersion

    Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML,like Gecko)
    Safari/125.1

    8.4 浏览器检测脚本
    opera 4.0+
    ie4+
    mozilla0.9.2+
    safari 1.0+
    netscape navigator 4.0-4.8.x

    8.4.1方法学
    检测最小版本
    if(isMinIE5){
    //code
    }
    8.4.2 第一步
    var sUserAgent = navigator.userAgent;
    var fAppVersion = parseFloat(navigator.appversion); //parseFloat 0.9.2 会丢掉2

    可以用函数:
    function compareVersions(sVersion1,sVersion2){
    var aVersion1 = sVersion1.split(".");
    var aVersion2 = sVersion2.split(".");

    if(aVersion1.length > aVersion2.length){
    for(var i=0; i<aVersion1.length-aVersion2.length;i++){
    aVersion2.push("0");
    }

    }else if(aVersion1.length<aVersion2.length){
    for(var i=0; i<aVersion2.length-aVersion1.length;i++){
    aVersion1.push("0");
    }
    }
    for(var i=0; i< aVersion1.length;i++){
    var iVal1 = parseInt(aVersion[i],10);
    var iVal2 = parseInt(aVersion[i],10);
    if(iVal1 < iVal2){
    return -1;
    }else if(iVal1 > iVal2){
    return 1;
    }
    }
    return 0;
    }

    compareVersion("0.9.2","0.9"); 1

    8.4.3 检测 Opera

    如果感觉不错,请 一个!
    by simpman
  • 相关阅读:
    使用jquery插件操作哈希表Hashtable的应用
    学用 ASP.Net 之 "字符串" (1): 基础
    敬告
    jQuery 练习[一]: 准备工作
    学用 ASP.Net 之 "字符串" (2): string.Format
    jQuery 练习[二]: 获取对象(1) 基本选择与层级
    学用 ASP.Net 之 "字符串" (3): string 类的非扩展方法
    jQuery 练习[二]: 获取对象(2) 定位子对象
    一个分割文本文件的小程序 回复 "jellyang" 的问题
    Delphi 7 类库继承关系表
  • 原文地址:https://www.cnblogs.com/simpman/p/2877701.html
Copyright © 2011-2022 走看看