【问题标题】:Distinguish Chrome from Safari using jQuery.browser使用 jQuery.browser 区分 Chrome 和 Safari
【发布时间】:2011-03-19 05:54:44
【问题描述】:

从 1.4 开始,jQuery.browser 似乎能够相当容易地识别 webkit。但是如何使用它来区分 Chrome 和 Safari(反之亦然)?

【问题讨论】:

    标签: jquery safari google-chrome webkit browser-detection


    【解决方案1】:

    您也可以尝试使用这种方法,它对我有用。

        isSafari: function () 
        {
                var isSafari = (navigator.userAgent.indexOf('Safari') != -1
                            && navigator.userAgent.indexOf('Chrome') == -1)
    
                console.log('IsSafari : ' + isSafari);
    
                return isSafari;
        },
    

    【讨论】:

      【解决方案2】:

      没有 jQuery

      isChrome = function() { 
        return /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
      }
      isSafari = function() {
        return /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);
      }
      

      使用 jQuery

      (以下不适用于 jQuery 1.9 及更高版本,因为 jQuery.browser 已从 jQuery 中删除。请参阅 http://api.jquery.com/jQuery.browser/

      $.browser.chrome = $.browser.webkit && !!window.chrome;
      $.browser.safari = $.browser.webkit && !window.chrome;
      

      【讨论】:

      • 第一个解决方案非常优雅。
      • 为什么!! chrome 是什么意思?
      • 很遗憾 $.browser 被删除了。但是我们如何从 1.10 检测到呢?我在 API 文档中没有看到任何内容。
      【解决方案3】:

      由于 Sarfraz 没有更正他的答案(感谢 Sarfraz 为我指出正确的方向),我将在此处发布功能代码。

      var userAgent = navigator.userAgent.toLowerCase(); 
      $.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase()); 
      
      // Is this a version of Chrome?
      if($.browser.chrome){
        userAgent = userAgent.substring(userAgent.indexOf('chrome/') +7);
        userAgent = userAgent.substring(0,userAgent.indexOf('.'));
        $.browser.version = userAgent;
        // If it is chrome then jQuery thinks it's safari so we have to tell it it isn't
        $.browser.safari = false;
      }
      
      // Is this a version of Safari?
      if($.browser.safari){
        userAgent = userAgent.substring(userAgent.indexOf('version/') +8);
        userAgent = userAgent.substring(0,userAgent.indexOf('.'));
        $.browser.version = userAgent;
      }
      

      【讨论】:

      • 对于 safari,$.browser.version 最终会为您提供 webkit 的版本,而不是 safari 的版本。尝试 userAgent.indexOf('Version/') + 8 代替。
      • 另外,您可以在userAgent = userAgent.substring(0,userAgent.indexOf('.')); 的行上使用子串直到空格字符而不是句点,以获得完整的版本号,而不仅仅是版本号的第一部分(主要编号) .
      • @David,您需要在 'Version/' 字符串中使用小写的 v,因为前面的代码中用户代理字符串是小写的。
      【解决方案4】:

      也适用于非 JQuery 用户:

          navigator.userAgent.indexOf('WebKit') + 1 ? 
             ((navigator.vendor || '').indexOf('Apple') + 1 ? /* Safari */ : /* Chrome */)
          : /* not Webkit */
      

      http://jsfiddle.net/HtWag/13/

      【讨论】:

      • 这对我有用。如果您不习惯这种条件语句,那么通读它会有点技巧,但是您将其布置得很好。非常感谢。
      【解决方案5】:
      window.chrome?$.browser.chrome=!0:($.browser.webkit&&($.browser.safari=!0),$.browser.chrome=!1);
      

      此补丁添加了 $.browser.chrome 并从 $.browser.safari

      中排除了 Goolge Chrome 检测

      【讨论】:

        【解决方案6】:
        /Chrome/.test(navigator.userAgent)
        

        【讨论】:

          【解决方案7】:

          你可以这样做:

          // Is this a version of Chrome?
          if($.browser.chrome){
            userAgent = userAgent.substring(userAgent.indexOf('chrome/') +7);
            userAgent = userAgent.substring(0,userAgent.indexOf('.'));
            version = userAgent;
            // If it is chrome then jQuery thinks it's safari so we have to tell it it isn't
            $.browser.safari = false;
          }
          
          // Is this a version of Safari?
          
          if($.browser.safari){
            userAgent = userAgent.substring(userAgent.indexOf('safari/') +7);
            userAgent = userAgent.substring(0,userAgent.indexOf('.'));
            version = userAgent;
          }
          

          http://api.jquery.com/jQuery.browser/

          【讨论】:

          • 嗯——$.browser.chrome 未定义。并且 $.browser.safari 对 chrome 和 safari 都适用
          • @sAc,你很接近,这应该出现在你提供的代码之前:var userAgent = navigator.userAgent.toLowerCase(); $.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase()); var version = 0;
          • @sAc,另外,version 变量是不需要的,应该用$.browser.version 替换。
          • @sAc,我愿意接受你的回答,因为它让我走上了正轨——但只要它包含不可操作的代码,我就无法这样做。请编辑您的答案以更正上述错误。
          • @kingjeffrey:我发布了来自 jquery 文档的代码,我的答案中发布了链接,它不是我写的。这些 cmets 中已经提到了任何修复:)
          猜你喜欢
          • 2014-08-25
          • 1970-01-01
          • 2013-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-19
          • 1970-01-01
          • 2018-04-22
          相关资源
          最近更新 更多