【问题标题】:jQuery.browser is deprecated, but how do you use .support?jQuery.browser 已弃用,但如何使用 .support?
【发布时间】:2010-12-04 02:59:51
【问题描述】:

在我的网页上,我有这个 CSS:

tr:hover {
    background-color: #f0f;
}

除了好的旧 IE 之外,它在所有浏览器中都能很好地工作。我知道我可以编写一些 jQuery 来在鼠标悬停/移出时添加和删除一个类,但我不想妨碍(尽管如此轻微)所有其他正确支持 :hover 的浏览器 - 所以我想仅对原生不支持纯 CSS 解决方案的浏览器应用此 JS 行为。

当然,我们都知道$.browser 已被弃用,而且我们都知道浏览器嗅探是一件坏事,而且关于 SO 的所有其他问题都有大量类似于“你不应该这样做”的答案检查浏览器,检查功能”,在这些人居住的魔法仙境中,这一切都很好,但我们其他人需要得到我们的网站在 IE6 和其他浏览器上运行正常。

$.support 在 IE6 和 7 上看起来像这样:

leadingWhitespace: false
tbody:             false
objectAll:         false
htmlSerialize:     false
style:             false
hrefNormalized:    false
opacity:           false
cssFloat:          false
scriptEval:        false
noCloneEvent:      false
boxModel:          true

我到底应该如何使用这些属性来确定tr:hover 是否有效?

是的,我知道在这个例子中,它是相当无害的,我可能会侥幸逃脱,要么不向 IE 用户提供该功能,要么在所有浏览器中模拟它,但这不是重点。当$.support 没有接近替换它时,你应该如何停止使用$.browser

【问题讨论】:

    标签: jquery cross-browser sniffing


    【解决方案1】:

    简单的答案 - 在某些情况下你不能,这是我认为你应该使用任何必要的手段来完成工作的情况之一。许多流行的插件(日期选择器和模态脚本)需要来执行此操作(例如 iframe shim),否则脚本将无法在特定的(尽管是旧的)浏览器上正常工作。

    但是,我不会像 $.browser 那样嗅探 userAgent,而是会针对 IE6 进行对象检测或使用 CC。

    <!--[if IE 6]><script src="/js/ie6.js"></script><![endif]-->
    

    您还可以提供一个通用的 IE js 文件,然后根据版本在其中分支出来。

    【讨论】:

    • +1,因为这可能比用户代理嗅探更可靠,但它并没有解决您希望代码向前兼容的问题:如果 IE9 出现并支持功能X,使用仅限 IE 的条件注释将不起作用。 (我知道你可以做[if IE&lt;9] 之类的,但那仍在嗅探..
    • CC 的优势在于它们不能被欺骗,或者至少在不入侵您的注册表的情况下不会被欺骗。我希望 jQuery 没有弃用 $.browser。一定是一长串给 Resig 先生的电子邮件:“你做错了!”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2023-02-19
    • 2019-03-17
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多