2010-07-21 172 views

回答

38

由于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; 
} 
+3

对于safari,$ .browser.version最终会为您提供webkit的版本,而不是Safari的版本。试试用userAgent.indexOf('Version /')+ 8代替。 – David 2011-08-24 21:37:08

+0

此外,你可以子字符串,直到一个空格字符,而不是句号,说'userAgent = userAgent.substring(0,userAgent.indexOf('。'));'为了得到完整版本号,而不是只是第一个部分版本号(主号码)。 – mkmurray 2012-02-29 00:42:43

+3

@David,你需要在你的''Version /''字符串中做小写'v',就像在代码中用户代理字符串是小写的那样。 – mkmurray 2012-02-29 00:43:52

2

你可以这样做:

// 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/

+0

uhm - $ .browser.chrome未定义。并且$ .browser.safari对于chrome和safari都是true – 2010-07-21 21:19:12

+0

@sAc,你已经接近了,这应该出现在你提供的代码之前:var userAgent = navigator.userAgent.toLowerCase(); $ .browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase()); var version = 0;' – kingjeffrey 2010-07-21 21:28:27

+0

@sAc,'version'变量不需要,应该用'$ .browser.version'替换。 – kingjeffrey 2010-07-22 20:13:37

2
/Chrome/.test(navigator.userAgent) 
36

没有 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; 
+1

第一个解决方案非常优雅。 – NullVoxPopuli 2012-02-29 19:02:32

+0

为什么!铬是什么意思? – Carlos 2012-08-31 11:29:36

+0

'$ .browser.webkit &&!window.chrome'在Firefox中的结果为... – 2012-09-07 02:02:48

0
window.chrome?$.browser.chrome=!0:($.browser.webkit&&($.browser.safari=!0),$.browser.chrome=!1); 

这个补丁增加了$ .browser.chrome,也排除Goolge的Chrome浏览器检测从$ .browser.safari

2

也非JQuery的用户:

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

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

+0

这为我做了诡计。如果你不习惯这种条件陈述,那么通读一点点技巧是可以的,但是你已经很好地解决了这个问题。万分感谢。 – 2012-07-23 20:59:38

0

你也可以尝试使用这种方法,它为我工作。

isSafari: function() 
    { 
      var isSafari = (navigator.userAgent.indexOf('Safari') != -1 
         && navigator.userAgent.indexOf('Chrome') == -1) 

      console.log('IsSafari : ' + isSafari); 

      return isSafari; 
    },