$.browser 的替代品是啥

Posted

技术标签:

【中文标题】$.browser 的替代品是啥【英文标题】:What's the replacement for $.browser$.browser 的替代品是什么 【发布时间】:2012-03-27 14:20:03 【问题描述】:

jQuery 文档将 $.browser 标记为已弃用。那么它的替代品是什么?

【问题讨论】:

不是真正的 jQuery 方法 - 但 css hacks 可能对您有用。 您应该避免在帖子中添加更多问题。您已经收到了许多原始问题的答案。 谢谢,我会开一个新问题 【参考方案1】:

基于jQuery migration plugin,我找到了这个。

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属性的各种取值) 虽然主要答案是正确的,但如果您在一个具有依赖于$.browser 的遗留代码的网站上工作,不幸的是,这个答案是要走的路,直到可以删除旧代码. 感谢您实际回答问题。 是的,这绝对可以作为旧插件的补丁。 (并回答问题) 这在某种程度上是有帮助的,而上面引用的 jquery 文档却没有。【参考方案2】:

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

根据docs,此功能在1.3中已弃用, 并在 1.9 中完全删除,尽管它在 official jQuery Migrate plugin 中仍然可用。

如果你想做正确的事

取决于browser detection 是not a good idea。特征检测是要走的路(Modernizr 是一个很好的工具)。 jQuery 有一个 $.support() 方法来提供一些特征检测,但它现在也被弃用了。 They also suggest using Modernizer.

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

修复浏览器怪癖不是浏览器检测的有效用例,但还有其他用例。使用任何 javascript 浏览器检测工具(如 bowser),因为此功能根本不依赖 jQuery。

【讨论】:

Modernizr 是一个很棒的 CSS3/html5 特征检测工具。 你错了@bažmegakapa,存在浏览器漏洞,比如window.onload event doesn't fire in chrome,所以我们需要通过浏览器检测来弥补这些漏洞。 没错,@bažmegakapa,我只是说不要在编程中说永远。 ***.com/questions/7493293/… 我正在构建一个用于报告错误的应用程序,它收集有关用户浏览器/设备的数据。所以想要这个功能是完全合理的。设备检测并不邪恶,只是你为什么使用它的问题。感谢@takien 的快速回答。 @kapa 人们仍然被困在完全更新旧代码 $.browser 并在几年后提出这个问题。您的回答提供了文档中提供的一些信息,而不是当您的代码库被冻结在琥珀中时解决真正问题的方法【参考方案3】:

没有直接替代品。您应该使用特征检测而不是浏览器检测(您有充分的理由需要了解浏览器吗?),因此您可以使用$.support property。 (它在$.browser 的 API 文档中说了这么多。)

【讨论】:

Jquery 警告不要使用 $.support:“代表不同浏览器功能或错误存在的属性集合。供 jQuery 内部使用;当内部不再需要特定属性时,可能会删除它们以提高页面启动性能。对于您自己的项目的特征检测需求,我们强烈建议使用诸如 Modernizr 之类的外部库,而不是依赖 jQuery.support 中的属性。"【参考方案4】:

jQuery.support

【讨论】:

【参考方案5】:

您可以使用 javascript 中的导航器变量

console.log(navigator)

但如果您想检查与 jquery 功能的兼容性,您可以使用 support var 之类的

$.support.ajax

【讨论】:

【参考方案6】:

jquery-browser-plugin 是一个很好的替代品

【讨论】:

以上是关于$.browser 的替代品是啥的主要内容,如果未能解决你的问题,请参考以下文章

XCTAssertEqualObjects 的替代品是啥?

UseConcMarkSweepGC 已弃用,它的替代品是啥?

::shadow 和 /deep/ 的替代品是啥?

Apache Camel 的替代品是啥 [关闭]

雪花中的Bytea替代品是啥

Microsoft.Azure.WebHosts.JobHostConfiguration 的替代品是啥