【问题标题】:How to detect IE7 and IE8 using jQuery.support如何使用 jQuery.support 检测 IE7 和 IE8
【发布时间】:2012-02-12 00:15:54
【问题描述】:

如何使用jQuery.support 属性检测 IE 7 和 IE 8?

是否可以使用 jQuery.support 检测浏览器版本或仅使用那些等等等等浏览器功能?

【问题讨论】:

    标签: jquery internet-explorer cross-browser


    【解决方案1】:
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { 
        var ieversion = new Number(RegExp.$1);
        alert(ieversion < 9);
    }
    

    【讨论】:

      【解决方案2】:

      我添加了几行 Javascript 以使其再次工作:

      jQuery.uaMatch = function (ua) {
          ua = ua.toLowerCase();
      
          var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
                  /(webkit)[ \/]([\w.]+)/.exec(ua) ||
                  /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
                  /(msie) ([\w.]+)/.exec(ua) ||
                  ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
                  [];
      
          return {
              browser: match[ 1 ] || "",
              version: match[ 2 ] || "0"
          };
      };
      
      if (!jQuery.browser) {
          matched = jQuery.uaMatch(navigator.userAgent);
          browser = {};
      
          if (matched.browser) {
              browser[ matched.browser ] = true;
              browser.version = matched.version;
          }
      
          // Chrome is Webkit, but Webkit is also Safari.
          if (browser.chrome) {
              browser.webkit = true;
          } else if (browser.webkit) {
              browser.safari = true;
          }
      
          jQuery.browser = browser;
      }
      

      【讨论】:

        【解决方案3】:

        我用它来检查浏览器是否为 ie 8 或更少

        要更改 ie 版本,只需将 8 更新为另一个 ie 版本

        if (jQuery.browser.msie && jQuery.browser.version.substr(0,1) <= 8 ) {   
            runIECode();
        } else {
            runOther();
        }
        

        【讨论】:

          【解决方案4】:

          jQuery.support 用于检测浏览器功能。要检测浏览器版本,请使用 jQuery.browser:

          if ($.browser.msie && $.browser.version.substr(0,1)<7) {
          //IE7
          
          }
          

          更新:$.browser 现已弃用,请勿使用。

          【讨论】:

          • 我认为这只会检测到IE6及以下。如果您也想包含 IE7,则应使用比较运算符 &lt;=
          【解决方案5】:

          我注意到了很多不同的方法,虽然我发现这很有效,但它不使用$.support。另请注意,jquery 刚刚宣布他们将在 jquery 2.0 (http://blog.jquery.com/2012/06/28/jquery-core-version-1-9-and-beyond/) 中删除对 IE 6、7、8 的任何支持。

          var msVersion = navigator.userAgent.match(/MSIE ([0-9]{1,}[\.0-9]{0,})/),
                msie = !!msVersion,
                ie6 = msie && parseFloat(msVersion[1]) < 7;
          
            // Help prevent flashes of unstyled content
            if (!ie6) {
              //Do Something here.
            }
          

          编码愉快!

          【讨论】:

            【解决方案6】:

            请注意以下内容,因为它还包括 IE10:

            if ($.browser.msie && $.browser.version.substr(0,1)<7) {
            //<IE7
            }
            

            更好的使用:

            if ($.browser.msie && parseInt($.browser.version,10)<7) {
            //<IE7
            }
            

            【讨论】:

            • $.browser 不再包含在 jQuery 1.9+ 中,如果需要,您可以使用 jQuery Migrate 插件将其添加回来。
            【解决方案7】:
            if (jQuery.support.leadingWhitespace == false){
            
            ... code for IE7-IE8 ...
            
            }
            else {
            ... 
            }
            

            【讨论】:

            • 另一个是 'opacity'(即 jQuery.support.opacity == false)
            【解决方案8】:

            我发现的一个技巧是在 HTML 中添加条件标签

            <!--[if lt IE 7]><body class="ie ie6 lte9 lte8 lte7"><![endif]-->
            <!--[if IE 7]><body class="ie ie7 lte9 lte8 lte7"><![endif]-->
            <!--[if IE 8]><body class="ie ie8 lte9 lte8"><![endif]-->
            <!--[if IE 9]><body class="ie ie9 lte9"><![endif]-->
            <!--[if !IE]><!--><body class="not-ie"><!--<![endif]-->
            

            然后像这样使用 JQuery:

            $('body.ie7')
            

            它还有助于特定于 IE 的 CSS

            body.ie6{ margin: 0; }
            

            我不知道这是否对你有好处,但无论如何,这仍然是一个选择。

            【讨论】:

            • 很多时候,在编写在其他网站上运行的插件时,您不能这样做。此外,这是浪费字节,非常使您的代码混乱。
            • @vsync 不,它没有。 HTML5 Boilerplate preaches too. 是一个很好的做法
            • @MT - 我为什么要听 HTML5 Boilerplate?我从事这项业务的时间已经足够长,可以拥有自己的意见......可能比那里的人更长。
            • @MT,几年前我在 EA 官网上找到了这段代码。这些人是为了制作好东西而获得报酬的。你是对的,你可以随心所欲地编写代码,没有完美的代码。这对你来说似乎很乱,但任何人的代码对其他人来说都是乱七八糟的。这段代码对我有用。它干净且易于理解,比 JS 中的大量行和函数要好得多。如果您有更好的解决方案,请分享。我很乐意学习新东西。
            • @vsync,您的代码没有显示在那里,仅供参考。看到 OP 专门针对 oldIE - 浏览器而不是功能集(这是有效的,比如说,包括 jQuery 1.x 和 2.x) - 使用 CC 可以 保证 你不会针对缺少特定功能但没有与 IE8/9 完全相同的缺陷的其他浏览器。回复:H5BP,每一个问题都不是“游戏中的经验”,而是最终决定的公开和详细辩论的数量。 IE10 仍然存在问题,但它们更容易在 IE10 中进行特征检测和填充。
            【解决方案9】:

            这完全可以在支持下实现:

            if (!$.support.leadingWhitespace) {
                //IE7 and 8 stuff
            }
            

            这也会检测到 IE 6,但是,如果您不希望 IE 6 运行此代码块,则需要另一个标志来排除它

            不使用浏览器的一个很好的理由是它是一个已弃用的功能,并且很可能会在 1.9 版的插件中被删除。 (见How to detect IE7 with jQuery?回复的cmets)

            “我们建议不要使用此属性;请尝试使用特征检测代替(请参阅 jQuery.support)。jQuery.browser 可能会在 jQuery 的未来版本中移动到插件中” http://api.jquery.com/jQuery.browser/

            这是一个工作示例:http://jsfiddle.net/AGtG8/16/

            【讨论】:

            • 完美! ps: 也检测IE5。
            • 优雅的答案。我讨厌那些“用户代理”或“html 标签”方法。
            【解决方案10】:

            如前所述,.support 用于特征检测。如果要检测浏览器,只需使用.browser

             var ua = $.browser;
             if ( ua.msie && ua.version.slice(0,1) == "8" ) {
               alert('IE 8');
             } else if ( ua.msie && ua.version.slice(0,1) == "7" ) {
               alert('IE 7');
             } else {
               alert('something else');
             }
            

            【讨论】:

            • $.browser 已弃用,可能会在未来的版本中被删除。
            【解决方案11】:

            试试$.browser,它会让你知道浏览器版本是否低于IE9

             var isM = false;
             $.each($.browser, function (i, val) {
                if ($.browser.msie && parseInt(val) < 9) isM = true;
            });
            

            【讨论】:

            • @oezi 提到 .support 用于特征检测。
            • 这里不需要 $.each。
            【解决方案12】:

            使用jQuery.browser.version 代替支持

            【讨论】:

            • 是的,我告诉过你使用 browser.version 而不是 support。没有支持是不可能的。
            • FWIW, jQuery.browser.version 可能适用于实际使用旧版本 IE 的用户,但对于使用 IE9 的早期版本(版本显示为“9.0”而不是早期版本)使用兼容模式测试失败版本。)但是,jQuery.support 确实适用于 IE9 兼容模式。
            • 在 jquery 1.9 中已弃用>
            • 其实……它现在被删除了
            猜你喜欢
            • 1970-01-01
            • 2010-10-09
            • 1970-01-01
            • 1970-01-01
            • 2010-11-21
            • 1970-01-01
            • 2011-04-22
            • 1970-01-01
            • 2010-12-29
            相关资源
            最近更新 更多