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

IT技术 javascript jquery
2021-01-29 22:56:10

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

6个回答

如果您不想使用$.browser,请查看案例 1,否则也许案例 23可以帮助您了解情况,因为不建议使用它$.browser(用户代理可以使用此方法进行欺骗)。可以使用另一种方法来jQuery.support检测功能支持而不是代理信息。

但...

如果您坚持获取浏览器类型(仅 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!");

我以前使用过这些案例并且效果很好,但不推荐它们......

案例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!");
JQuery 不再支持 .Browser。现在已经折旧了。请参阅 vsync 的答案。
2021-03-19 22:56:10
你会如何为 IE 和 FireFox 写出案例 1?
2021-03-25 22:56:10
@ 案例 3 不会误检测融岩和铬吗?
2021-04-04 22:56:10
喜欢.live(..)和其他人。我还写道不建议使用它@MichaelMikhjian
2021-04-11 22:56:10
您的演示在 Maxthon 下失败。它将它识别为 Safari,因为它是 webkit。
2021-04-13 22:56:10

这里的大多数答案都已经过时了,没有更多了jQuery.browser,为什么有人甚至会使用 jQuery 或嗅探User Agent超出我的范围。

与其检测浏览器,不如检测一个功能
(无论是否支持)。

以下是falseMozilla FirefoxMicrosoft Edge 中true谷歌浏览器中

"webkitLineBreak" in document.documentElement.style

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

示例:HTML5“日期”输入类型。在 iOS WebKit 上,无法将字段清空;所以我必须手动添加一个“清除”按钮。Safari 声称可以理解 Date,但它的处理方式不正确。我想不出任何方法可以通过特征检测来查看谁做得对
2021-03-15 22:56:10
如果浏览器声称支持某个功能,但支持它的方式与其他浏览器不同,则这不起作用。
2021-03-17 22:56:10
我要说的是检测我所知道的一种浏览器与所有其他浏览器的不同!;-)
2021-03-25 22:56:10
@StephenR - 你所说的不是特征检测,而是实现检测,这是另一个主题。
2021-04-02 22:56:10
如果您需要更强大的特征检测,那么混合多个测试就可以了。您需要选择一项您确定的功能,并了解它在其他浏览器上的表现,而不是一些随机的功能。
2021-04-07 22:56:10

与其检测浏览器,不如检测一个功能(无论是否支持)。这就是Modernizr所做的。

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

var isWebKit = !!window.webkitURL;

由于一些评论表明上述方法不适用于较旧的 Safari 版本。使用评论和另一个答案中建议的另一种方法进行更新:

var isWebKit = 'WebkitAppearance' in document.documentElement.style;
这个答案是不正确的。Modernizr 不会告诉您浏览器特定的错误,并且兼容性不仅仅是功能检测。当您想要检测功能时使用功能检测,当您希望修复特定于浏览器的故障时使用浏览器检测。
2021-03-18 22:56:10
虽然您认为这是最好的做法是对的,但并非总是可行。例如,webkit 浏览器包含一个我希望解决的错误,但我无法轻松检查。我几乎坚持检查用户代理。
2021-03-21 22:56:10
WebkitAppearance 对我不起作用。Firefox 也被检测到。MDN 解释了 ff 并且出于兼容原因支持它developer.mozilla.org/en-US/docs/Web/CSS/appearance
2021-03-30 22:56:10
你的支票很好,但可能不是未来的证明,因为最终 webkitURL 将被 URL 替换。
2021-04-05 22:56:10
旧版本的 safari(6.0 之前)和 chrome(8.0 之前)不支持 window.webkitURL
2021-04-11 22:56:10

2019年仍然存在怪癖和不一致之处。

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

该主题的所有答案都不再有效。(也许那些有jquery 的

这是一种替代方法,通过原生CSS 支持 api使用 javascript 测试是否支持 css 规则可能会进化,要适应!

请注意,可以传递许多由分号分隔的 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!!!")
 }

注意不要在循环中使用它,为了提高性能,最好在加载时填充一个常量:

const ff = CSS.supports("( -moz-user-select:unset )")
if (ff){ //... } 

使用CSS,以上将是:

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

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

可能的 -webkit-only css 规则列表。

可能的 -moz- 规则列表。

我可以使用 css 支持吗?

/WebKit/.test(navigator.userAgent) - 而已。

不幸的是,新的 MS 浏览器 Edge 位于 UserAgent:“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240”,这里正式确认这种行为
2021-03-31 22:56:10
大多数像window.webkitURL“WebkitAppearance”这样的解决方案也不排除Edge。
2021-04-11 22:56:10
您可以通过以下方式过滤掉边缘 (/WebKit/.test(navigator.userAgent) && !/Edge/.test(navigator.userAgent))
2021-04-11 22:56:10