1.方法学:

最好是检测浏览器的最小版本,这样才不会当版本升级之后不断添加新的内容进去。

理想的方式:

if(isMinIE5){

//code

}

直接检查准确的版本的缺点:

if(isMinIE5||isIE6){

  //code

}

但是当版本升级之后加入升级到版本10:

if(isMinIE5||isIE6||isIE7||isIE8||isIE9||isIE10){

//code

}

相对于直接检测浏览器的最小版本更麻烦

2.具体的步奏以及注释:(user-agent方法)

var sUserAgent = navigator.userAgent;                                                             //将user-agent字符串保存到本地变量之中去
var fAppVersion = parseFloat(navigator.appVersion);                                     //获得本地浏览器的版本

function compareVersions(sVersion1, sVersion2) {              //用split()方法将两个版本号转换为数组,用 "."作为字符的分隔符
    var aVersion1 = sVersion1.split(".");
    var aVersion2 = sVersion2.split(".");

//保证两个版本的各个数字的长度也一样,否则在较短的一个版本末尾添加0至两个版本的长度相等
    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");
        }  
    }
   //比较两个版本的大小,版本1大于版本2返回1,反之,返回-1,相等返回0
    for (var i=0; i < aVersion1.length; i++) {

if (aVersion1[i] < aVersion2[i]) {
            return -1;
        } else if (aVersion1[i] > aVersion2[i]) {
            return 1;
        }  
    }
  
    return 0;
}

//检测Opera浏览器的版本
var isOpera = sUserAgent.indexOf("Opera") > -1;
var isMinOpera4 = isMinOpera5 = isMinOpera6 = isMinOpera7 = isMinOpera7_5 = false;
if (isOpera) {
    var fOperaVersion;
    if(navigator.appName == "Opera") {
        fOperaVersion = fAppVersion;     //Opera没有伪装的情况
    } else {
        var reOperaVersion = new RegExp("Opera (//d+//.//d+)");
        reOperaVersion.test(sUserAgent);
        fOperaVersion = parseFloat(RegExp["$1"]);       //利用正则表达式判断伪装之后的真正版本号
    }
    isMinOpera4 = fOperaVersion >= 4;
    isMinOpera5 = fOperaVersion >= 5;
    isMinOpera6 = fOperaVersion >= 6;
    isMinOpera7 = fOperaVersion >= 7;
    isMinOpera7_5 = fOperaVersion >= 7.5;
}
var isKHTML = sUserAgent.indexOf("KHTML") > -1
              || sUserAgent.indexOf("Konqueror") > -1
              || sUserAgent.indexOf("AppleWebKit") > -1;

//检测Safari浏览器的版本
var isMinSafari1 = isMinSafari1_2 = false;
var isMinKonq2_2 = isMinKonq3 = isMinKonq3_1 = isMinKonq3_2 = false;
if (isKHTML) {
    isSafari = sUserAgent.indexOf("AppleWebKit") > -1;
    isKonq = sUserAgent.indexOf("Konqueror") > -1;
    if (isSafari) {
        var reAppleWebKit = new RegExp("AppleWebKit///(//d+(?://.//d*)?)");
        reAppleWebKit.test(sUserAgent);
        var fAppleWebKitVersion = parseFloat(RegExp["$1"]);
        isMinSafari1 = fAppleWebKitVersion >= 85;
        isMinSafari1_2 = fAppleWebKitVersion >= 124;
    } else if (isKonq) {
        var reKonq = new RegExp("Konqueror///(//d+(?://.//d+(?://.//d)?)?)");
        reKonq.test(sUserAgent);
        isMinKonq2_2 = compareVersions(RegExp["$1"], "2.2") >= 0;
        isMinKonq3 = compareVersions(RegExp["$1"], "3.0") >= 0;
        isMinKonq3_1 = compareVersions(RegExp["$1"], "3.1") >= 0;
        isMinKonq3_2 = compareVersions(RegExp["$1"], "3.2") >= 0;
    }
  
}

//检测IE浏览器的版本
var isIE = sUserAgent.indexOf("compatible") > -1
           && sUserAgent.indexOf("MSIE") > -1
           && !isOpera;
         
var isMinIE4 = isMinIE5 = isMinIE5_5 = isMinIE6 = false;
if (isIE) {
    var reIE = new RegExp("MSIE (//d+//.//d+);");
    reIE.test(sUserAgent);
    var fIEVersion = parseFloat(RegExp["$1"]);
    isMinIE4 = fIEVersion >= 4;
    isMinIE5 = fIEVersion >= 5;
    isMinIE5_5 = fIEVersion >= 5.5;
    isMinIE6 = fIEVersion >= 6.0;
}

//检测Moz浏览器的版本
var isMoz = sUserAgent.indexOf("Gecko") > -1
            && !isKHTML;
var isMinMoz1 = sMinMoz1_4 = isMinMoz1_5 = false;
if (isMoz) {
    var reMoz = new RegExp("rv:(//d+//.//d+(?://.//d+)?)");
    reMoz.test(sUserAgent);
    isMinMoz1 = compareVersions(RegExp["$1"], "1.0") >= 0;
    isMinMoz1_4 = compareVersions(RegExp["$1"], "1.4") >= 0;
    isMinMoz1_5 = compareVersions(RegExp["$1"], "1.5") >= 0;
}

转载于:https://www.cnblogs.com/lala314/p/5023233.html

javascript关于检测浏览器和操作系统的问题相关推荐

  1. JS window对象 Navigator对象 Navigator 对象包含有关浏览器的信息,通常用于检测浏览器与操作系统的版本。...

    Navigator对象 Navigator 对象包含有关浏览器的信息,通常用于检测浏览器与操作系统的版本. 对象属性: 查看浏览器的名称和版本,代码如下: <script type=" ...

  2. 6、JavaScript进阶篇③——浏览器对象、Dom对象

    一.浏览器对象 1. window对象 window对象是BOM的核心,window对象指当前的浏览器窗口. window对象方法: 注意:在JavaScript基础篇中,已讲解了部分属性,windo ...

  3. JavaScript进阶篇③ — 浏览器对象、Dom对象

    一.浏览器对象 1. window对象 window对象是BOM的核心,window对象指当前的浏览器窗口. window对象方法: 注意:在JavaScript基础篇中,已讲解了部分属性,windo ...

  4. java缩放浏览器_javascript检测浏览器的缩放状态实现代码

    摘要:这篇JavaScript栏目下的"javascript检测浏览器的缩放状态实现代码",介绍的技术点是"JavaScript.检测浏览器.缩放状态.实现代码.浏览器. ...

  5. 用于检测浏览器语言偏好的JavaScript

    本文翻译自:JavaScript for detecting browser language preference [duplicate] This question already has an ...

  6. javascript检测浏览器类型和版本号(兼容各浏览器)

    代码  1 from: http://www.webreference.com/tools/browser/javascript.html  2 http://browserspy.dk/browse ...

  7. javascript高级程序设计 --- 浏览器检测、操作系统检测、浏览器内核检测

    JavaScript 包含一个名为 Navigator 的对象,它就可以完成上述的任务. Navigator 包含了有关访问者浏览器的信息,包括浏览器类型.版本等等 Navigator 对象 Java ...

  8. 《JavaScript高级程序设计》阅读笔记(十六):javascript检测浏览器和操作系统-detect.js...

    检测浏览器的方式 1.对象特征检测法:判断浏览器能力的通用方法.如果更关注浏览器的能力而不在乎它的实际身份,就可以使用这种检测方法.常见的原生Ajax写法中就用这种方法来创建XMLHttpReques ...

  9. 【JavaScript】移动端扫描二维码检测浏览器(微信、支付宝、Safari、其他浏览器)

    // 检测客户端类型 // 注意:19年6月份iPad出了专门的操作系统iPadOS // 它的userAgent中不是iPad,也没有下文中的mobile,而是Macintosh,类似Mac.需要兼 ...

最新文章

  1. 云解析DNS产品优势与应用场景
  2. 如何使用Java中的UTC或GMT获取当前日期和时间?
  3. 『奇葩问题集锦』Fedora ubuntu 下使用gulp 报错 Error: watch ENOSPC 解决方案
  4. [Abp 源码分析]DTO 自动验证
  5. Address already in use
  6. SQL Server 2012笔记分享-28:使用日志文件查看器
  7. 当前页禁止复制粘贴截屏
  8. visio2019安装教程
  9. android so劫持,防劫持SDK
  10. linux之U盘读写速度测试
  11. 留言板显示服务器错误,动易Cms:解读SiteFactory 留言板出现:服务器无响应,错误代码:500-动易Cms教程...
  12. win10 安装mysql 卡死_win10安装Mysql5.5卡住假死
  13. iOS开发之静态库.a的制作教程
  14. javascript笔记 狂神说
  15. 【学术】英文写作中值得参考的语法、句式(二)
  16. 立创EDA——PCB的走线(五)
  17. Unity快速入门之四 - Unity模型动画相关
  18. js控制excel打印完美解决方案(转)
  19. 计算机专业需要盲打,计算机盲打的技巧与方法【听看打练习】
  20. java 自省_java spring mvc 自省机制填充

热门文章

  1. 详细讲解设计LOGO思维方式和方法【转】
  2. socks5协议RFC文档
  3. 如何为windows服务添加安装程序(转)
  4. linux c主要应用在哪个领域
  5. 把一个人的特点写具体作文_把一个人的特点写具体500字作文
  6. Makefile —— Makefile的规则是什么?make是如何工作的?make的工作方式是什么?
  7. Linux 下 VNC配置和使用(本机控制本机)
  8. WPF入门(四)-线形区域Path内容填充之填充图(ImageBrush)
  9. ROS Learning-032 (提高篇-010 Launch)Launch 深入研究 --- (启动文件编程)ROS 的 XML语法简介...
  10. 求高精度幂(java)