如何检测chrome和safari浏览器(webkit)

时间:2012-09-27 16:23:31

标签: javascript jquery

我正在尝试使用jquery或javascript检测chrome和safari浏览器。 我以为我们不应该使用jQuery.browser。这里有什么建议吗?非常感谢!

9 个答案:

答案 0 :(得分:79)

如果您不想使用$.browser,请查看案例1 ,否则案例2 3 可以帮助您获得通知,因为不建议使用$.browser(用户代理可以使用此欺骗)。另一种方法是使用jQuery.support来检测功能支持,而不是代理信息。

但是...

如果您坚持要获取浏览器类型(仅限Chrome或Safari)但未使用$.browser案例1 就是您要找的...... < / p>


符合您的要求:

案例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!");

我之前使用过的这些案例并且运作良好,但不建议使用它们......

案例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,“优雅”解决方案)

现场演示: 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!");

答案 1 :(得分:74)

这里的大多数答案已经过时,不再有jQuery.browser,为什么有人甚至会使用jQuery或者会嗤之以鼻User Agent超出我的范围。

您应该更好地检测某个功能(无论是否支持),而不是检测浏览器。
以下是Mozilla Firefox,Microsoft Edge中的false;它是Google Chrome中的true

"webkitLineBreak" in document.documentElement.style

请注意,这不是面向未来的。浏览器可能会在将来的任何时间实施-webkit-line-break属性,从而导致错误检测。 然后,您只需在Chrome中查看文档对象,然后选择带有webkit前缀的任何内容,并检查其他浏览器中是否缺少该文档。

答案 2 :(得分:11)

您应该更好地检测某个功能(无论是否支持),而不是检测浏览器。这就是Modernizr的作用。

当然,在某些情况下您仍需要检查浏览器,因为您需要解决问题而不是检测功能。特定WebKit检查哪些不使用jQuery $.browser

var isWebKit = !!window.webkitURL;

正如一些评论所暗示的,上述方法对旧版Safari不起作用。使用评论和其他答案中建议的其他方法进行更新:

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

答案 3 :(得分:3)

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

答案 4 :(得分:2)

  

我正在尝试使用jquery或javascript检测chrome和safari浏览器。

使用jQuery.browser

  

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

那是因为检测浏览器是一个坏主意。如果您真的打算这样做,它仍然是检测浏览器的最佳方式(当涉及jQuery时)。

答案 5 :(得分:2)

2019年仍然存在怪癖和矛盾之处。

例如,在浏览器之间具有缩放的svg和指针事件。

该主题的答案都无法使用了。 (也许那些使用 jquery 的人)

这里是替代,通过使用JavaScript通过原生CSS support api测试是否支持css规则。可能会进化,要适应!

if (CSS.supports("( -webkit-box-reflect:unset )")){
  console.log("WEBKIT BROWSER")
  // More math...
 } else {
  console.log("ENJOY")
 }

if (CSS.supports("( -moz-user-select:unset )")){
  console.log("FIREFOX!!!")
 }

仅使用 CSS ,上面是:

@supports (-webkit-box-reflect:unset) {
  div {
    background: red
  }
}

@supports (-moz-user-select:unset) {
  div {
    background: green
  }
}
<div>
  Hello world!!
</div>

List of possible -webkit- only css rules.

List of possible -moz- only rules.

Can I use css support?

答案 6 :(得分:0)

jQuery提供:

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

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

<强>更新

正如其他答案/评论中所述,检查功能支持总是比代理信息更好。 jQuery还提供了一个对象:jQuery.support。检查the documentation以查看要检查的详细列表功能。

答案 7 :(得分:0)

您可以使用此缩小的jQuery代码段来检测您的用户是否正在使用移动设备进行查看。如果您需要测试特定设备,我已经包含了一系列JavaScript代码段,可用于检测各种移动手持设备,如iPad,iPhone,iPod,iDevice,Andriod,Blackberry,WebO和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/|-[a-w])|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)
{
…
}

检测网络

var isWebOS = /webos/i.test(navigator.userAgent.toLowerCase());

if (isWebOS)
{
…
}

检测Windows Phone

var isWindowsPhone = /windows phone/i.test(navigator.userAgent.toLowerCase());

if (isWindowsPhone)
{
…
}

答案 8 :(得分:0)

这里有很多答案。这是我的首要考虑。

如果没有JavaScript(包括出于安全目的最初由用户在浏览器中禁用Javascript的可能性)(如果用户信任该站点,则该白名单将被用户列入白名单),因为Javascript已关闭,DOM将无法使用。

以编程方式,您需要考虑后端服务器端或前端客户端。

通过后端,您可以使用公共分母HTTP“ User-Agent”请求标头和/或浏览器发出的任何可能的专有HTTP请求标头来输出特定于浏览器的HTML内容。

在客户端站点上,您可能需要强制执行Javascript以允许您使用DOM。如果是这样,那么您可能希望首先在HTML页面中使用以下内容:

<noscript>This site requires Javascript. Please turn on Javascript.</noscript>

虽然我们每天都将以某种方式(或不以某种方式)依赖于Java编码器,但是今天,假设每个用户都启用了javascript将是设计和产品开发质量检查错误。

我也已经看到最终以空白页结尾的网站或该网站可能因为假定每个用户都启用了javascript而崩溃的原因。出于安全目的,他们可能最初会禁用Javascript,并且某些浏览器(例如Chrome)将允许用户按域将网站列入白名单。 Edge是我知道的唯一的浏览器,Microsoft决定完全禁用用户关闭Javascript的能力。 Edge没有提供白名单概念,因此这是我个人不使用Edge的原因之一。

使用标记是一种简单的方法,可以通知用户您的网站没有Javascript就无法使用。一旦用户打开并刷新/重新加载页面,DOM就可以使用线程回复引用的技术来检测chrome和safari。

具有讽刺意味的是,我之所以来到这里,是因为我正在通过平台和Google更新相同的基本问题; chrome vs sarafi。我不知道Chrome创建了一个名为“ chrome”的DOM对象,这实际上就是检测“ chrome”与其他所有对象所需要的。

var isChrome = typeof(chrome)===“对象”;

如果为true,则为Chrome;如果为false,则为其他浏览器。

检查以查看Safari是否也创建了自己的DOM对象,如果是,则获取对象名称并执行相同的操作,例如:

var isSafari =(typeof(safari)===“ object”);

希望这些提示有所帮助。