如何检测铬和Safari浏览器(webkit)

我试图检测使用jQuery或JavaScript的铬和Safari浏览器。 我以为我们不应该使用jQuery.browser。 这里有什么build议吗? 非常感谢!

如果你不想使用$.browser ,看看情况1 ,否则情况23可以帮助你获得通知,因为不build议使用$.browser (用户代理可以使用这个欺骗) 。 另一种可以使用jQuery.support将检测function支持,而不是代理信息。

但…

如果你坚持让浏览器types(只是Chrome或Safari),但不使用$.browser情况1是你在找什么…


这符合你的要求:

情况1 🙁 没有jQuery和没有$ .browser,只是javascript)

现场演示: http : //jsfiddle.net/oscarj24/DJ349/

 var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor); var isSafari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor); if (isChrome) alert("You are using Chrome!"); if (isSafari) alert("You are using Safari!"); 

这些情况我以前用过,运作良好,但不build议…

情况2 🙁 使用jQuery和$ .browser,这是棘手的)

现场演示: http : //jsfiddle.net/oscarj24/gNENk/

 $(document).ready(function(){ /* Get browser */ $.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase()); /* Detect Chrome */ if($.browser.chrome){ /* Do something for Chrome at this point */ /* Finally, if it is Chrome then jQuery thinks it's Safari so we have to tell it isn't */ $.browser.safari = false; } /* Detect Safari */ if($.browser.safari){ /* Do something for Safari */ } }); 

情况3 🙁 使用jQuery和$ .browser,“优雅”的解决scheme)

现场演示: http : //jsfiddle.net/oscarj24/uJuEU/

 $.browser.chrome = $.browser.webkit && !!window.chrome; $.browser.safari = $.browser.webkit && !window.chrome; if ($.browser.chrome) alert("You are using Chrome!"); if ($.browser.safari) alert("You are using Safari!"); 

目前最好的方法是:

 // var isWebkit = 'webkitRequestAnimationFrame' in window; // deprecated var isWebkit = 'WebkitAppearance' in document.documentElement.style 

这么简单,但非常有效。

我希望这个前缀的名字能够坚持一段时间,所以我认为至less可以使用它一年或两年。 Chrome团队在改变方面声名狼借,虽然有传言说他们正在制作一个新的引擎, webkit一个分支将被赋予它自己的名字,但是这些问题是为了我们的未来。

顺便说一下,这里的大多数答案已经过时了,没有更多的jQuery.browser ,为什么任何人甚至会使用jQuery或嗅探User Agent超出了我。

而不是检测浏览器,而应该检测一个function(不pipe是否支持)。 这就是Modernizr所做的。

当然,有些情况下您仍然需要检查浏览器,因为您需要解决某个问题,而不是检测function。 具体的WebKit检查哪个不使用jQuery $.browser

 var isWebKit = !!window.webkitURL; 

正如一些评论build议,上述方法不适用于较旧的Safari版本。 更新与另一种方法build议在评论和另一个答案:

 var isWebKit = 'WebkitAppearance' in document.documentElement.style; 

/WebKit/.test(navigator.userAgent) – 就是这样。

我试图检测使用jQuery或JavaScript的铬和Safari浏览器。

使用jQuery.browser

我以为我们不应该使用jQuery.browser。

这是因为检测浏览器是一个坏主意。 如果你确实打算这么做的话,它仍然是检测浏览器(当涉及jQuery的时候)的最好方法。

jQuery提供了:

 if ($.browser.webkit){ ... } 

进一步阅读http://api.jquery.com/jQuery.browser/

更新

正如其他答案/评论中指出的那样,检查function支持比代理信息更好。 jQuery也提供了一个对象: jQuery.support 。 检查文档以查看要检查的详细列表function。

你可以使用这个缩小的jQuery片段来检测你的用户是否使用移动设备查看。 如果你需要testing一个特定的设备,我已经包括了一些JavaScript代码片段,可以用来检测各种移动手持设备,如iPad,iPhone,iPod,iDevice,Andriod,Blackberry,WebOs和Windows Phone。

 /** * jQuery.browser.mobile (http://detectmobilebrowser.com/) * jQuery.browser.mobile will be true if the browser is a mobile device **/ (function(a){jQuery.browser.mobile=/android.+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|symbian|treo|up.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|e-|e/|-[aw])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(-|2|g)|yas-|your|zeto|zte-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera); 

用法示例:

 if(jQuery.browser.mobile) { console.log('You are using a mobile device!'); } else { console.log('You are not using a mobile device!'); } 

检测iPad

 var isiPad = /ipad/i.test(navigator.userAgent.toLowerCase()); if (isiPad) { … } 

检测iPhone

 var isiPhone = /iphone/i.test(navigator.userAgent.toLowerCase()); if (isiPhone) { … } 

检测iPod

 var isiPod = /ipod/i.test(navigator.userAgent.toLowerCase()); if (isiPod) { … } 

检测iDevice

 var isiDevice = /ipad|iphone|ipod/i.test(navigator.userAgent.toLowerCase()); if (isiDevice) { … } 

检测Andriod

 var isAndroid = /android/i.test(navigator.userAgent.toLowerCase()); if (isAndroid) { … } 

检测黑莓

 var isBlackBerry = /blackberry/i.test(navigator.userAgent.toLowerCase()); if (isBlackBerry) { … } 

检测WebOs

 var isWebOS = /webos/i.test(navigator.userAgent.toLowerCase()); if (isWebOS) { … } 

检测Windows Phone

 var isWindowsPhone = /windows phone/i.test(navigator.userAgent.toLowerCase()); if (isWindowsPhone) { … }