什么可以替代 $.browser?

51
jQuery文档已经将$.browser标记为过时。那么它的替代品是什么?

1
这并不是一个 jQuery 方法,但是 css hacks 可能对你有用。 - Lix
1
你应该避免在你的帖子中添加更多问题。你已经收到了许多关于你原始问题的回答。 - Lix
1
谢谢,我会开一个新的问题。 - Rocky
6个回答

39

基于jQuery迁移插件,我发现了这个。

jQuery.uaMatch = function( ua ) {
    ua = ua.toLowerCase();
    var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
        /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
        /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
        /(msie) ([\w.]+)/.exec( ua ) ||
        ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || [];
    return {
        browser: match[ 1 ] || "",
        version: match[ 2 ] || "0"
    };
};
if ( !jQuery.browser ) {
    var 
    matched = jQuery.uaMatch( navigator.userAgent ),
    browser = {};
    if ( matched.browser ) {
        browser[ matched.browser ] = true;
        browser.version = matched.version;
    }
    // Chrome is Webkit, but Webkit is also Safari.
    if ( browser.chrome ) {
        browser.webkit = true;
    } else if ( browser.webkit ) {
        browser.safari = true;
    }
    jQuery.browser = browser;
}

谢谢。有些功能很难检测出来。(例如支持各种CSS属性的值) - Gus
虽然主要答案是正确的,但如果您正在处理依赖于$.browser的遗留代码的站点,则不幸的是,直到旧代码被删除之前,这个答案是可行的。 - razzed
4
感谢您实际回答问题。 - Ryan Ore
2
是的,这绝对可以作为旧插件的补丁。(并回答了问题) - Miro
1
这在某种程度上是有帮助的,而上面引用的jQuery文档则不然。 - davidjmcclelland

24

如果你真的需要旧版的$.browser

根据文档, 这个特性在1.3版本中被弃用,并在1.9版本中完全删除,尽管它仍然可以在官方jQuery Migrate插件中使用。

如果你想做得正确

依赖于浏览器检测 不是一个好主意。特性检测才是正确的方式(Modernizr是一个很好的工具)。jQuery曾经有一个$.support()方法来提供一些特性检测,但现在也已经过时了。他们还建议使用Modernizer。

如果你真的需要浏览器检测

修复浏览器问题并非浏览器检测的有效用例,但还有其他用例。使用任何JavaScript浏览器检测工具(如bowser),因为此功能完全不依赖于jQuery。


1
Modernizr是一款非常好用的CSS3/HTML5特性检测工具。 - Marcelo Mason
6
你错了,@bažmegakapa,浏览器存在一些bug,比如window.onload事件在Chrome中无法触发,所以我们需要通过浏览器检测来解决这些问题。 - Lajos Mészáros
1
没错,@bažmegakapa,我只是在说编程中不要说“永远不会”。 - Lajos Mészáros
1
我正在开发一个报告错误的应用程序,该应用程序收集有关用户浏览器/设备的数据。因此,希望具备此功能是完全合理的。设备检测并不邪恶,只是取决于你使用它的原因。感谢@takien的快速回答。 - Ryan Ore
1
@kapa 人们仍然被困在更新充满 $.browser 的遗留代码中,并在多年后来到这个问题。你的答案提供了一些文档中可用的信息,但并没有解决当你的代码库被冻结时的实际问题。 - davidjmcclelland
显示剩余9条评论

3

没有直接的替代方法。您应该使用功能检测而不是浏览器检测(您是否有需要知道浏览器的充分理由?),因此您可以使用$.support属性。(在$.browser的API文档中也有这样的说明。)


1
Jquery 提醒不要使用 $ .support: “一组属性,代表不同浏览器功能或错误的存在。旨在供jQuery内部使用;特定属性可能会在不再需要时从中删除,以提高页面启动性能。对于您自己项目的特征检测需求,我们强烈建议使用外部库,例如Modernizr,而不是依赖于jQuery.support中的属性。” - Chris Middleton

2

2

1

你可以使用 JavaScript 中的 navigator 变量。

console.log(navigator)

但是如果你想检查 jQuery 函数的兼容性,可以使用 support 变量,例如:

$.support.ajax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接