zoukankan      html  css  js  c++  java
  • 检查IE版本的方法

    问题背景

    由于性能方面的考虑,我们基于B/S架构的程序要求客户最好使用IE8及以后的版本。由于IE8支持兼容性视图模式,同事写的检查IE版本的代码在工作中发现并不可靠,为此花费时间研究了一下这个问题。本文记录下一些研究心得。

    注:约束是在前端使用JS脚本检测,因此忽略掉Asp.net服务端HttpBrowserCapabilities相关内容。

    如何限制只检测一次

    如果checkIEVersion分布在各个页面的onload事件中(例如通过asp.net的母板),那么访问每个页面都会有一次消耗。合适的方法是只在网站的default.html文件中进行IE版本检查,这样可确保访问网站时只检测一次。

    如何使用navigator检测版本

    与第一感不同,navigator的appVersion属性并没有userAgent属性可靠。

     

    userAgentd的内容示例如下:

    Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322)

     

    结合RegEx可解析出正确的版本号:

    function getInternetExplorerVersion()

    // Returns the version of Internet Explorer or a -1

    // (indicating the use of another browser).

    {

    var rv = -1; // Return value assumes failure.

    if (navigator.appName == 'Microsoft Internet Explorer')

    {

    var ua = navigator.userAgent;

    var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");

    if (re.exec(ua) != null)

    rv = parseFloat( RegExp.$1 );

    }

    return rv;

    }

    如何应对IE8兼容性模式的问题

    当IE8处于兼容性视图模式时,userAgent给出的版本信息为MSIE 7.0。有两种解决方法:

    1. 检测userAgent中新增的Trident标志,Trident/4.0指示IE引擎版本为IE 8,Trident/5.0指示IE引擎版本为IE 9

    2. 检测document.documentMode属性是否存在,该属性首次在IE 8引入

     

    参考列表

    主要的参考资料如下:

    1. Detecting Internet Explorer More Effectively

    2. Using the navigator object to detect client's browser

    3. The Internet Explorer 8 User-Agent String (Updated Edition)

    4. Defining Document Compatibility

  • 相关阅读:
    Jump Game II
    Trapping Rain Water
    First Missing Positive
    Median of Two Sorted Arrays
    noip2012开车旅行 题解
    AC自动机专题总结
    初探数位DP
    斯坦纳树 [bzoj2595][wc2008]游览计划 题解
    [bzoj3244][noi2013]树的计数 题解
    网络流模型小结
  • 原文地址:https://www.cnblogs.com/hbzhang/p/2323075.html
Copyright © 2011-2022 走看看