【问题标题】:Approach for sniffing Firefox 4 and higher嗅探 Firefox 4 及更高版本的方法
【发布时间】:2011-11-03 22:29:32
【问题描述】:

我正在编写一个必须检查 Firefox 4 或更高版本的 JavaScript 库。相信我,我需要。

我打算使用以下嗅探代码:

if ('MozAppearance' in document.documentElement.style) {

    //We have Mozilla

    if (!!window.FormData) {

        //We have Firefox4+

    }
}

我对此感觉很好,因为(在我看来)任何人都不太可能添加全局 FormData 方法。

假设我对与任何浏览器嗅探方法相关的常见风险感到满意,您能看出这有什么问题吗?

Firefox 中 window.FormData 的文档在这里:

https://developer.mozilla.org/en/DOM/XMLHttpRequest/FormData

谢谢!

【问题讨论】:

  • 但是为什么您需要检查 Firefox 4 或更高版本?您可能(但不太可能)没有考虑过更好的方法。
  • 我很想知道为什么是FF4?!
  • 我正在编写一个带有 Window.FormData 方法的浏览器......只是为了解决这个问题。想我会把它命名为“NOT FF4”。吸引人,不是吗?
  • “为什么”并不重要。这是题外话,但因为我知道你们不能休息,直到你知道为什么......在这里。这个库支持的插件对象需要在 Mac 上的 FF4+ 中进行 DOM 操作,因为这个插件所依赖的 FF 代码发生了变化。这是现实世界的肮脏,但事实就是如此。如果您从来没有闻过并且您认为“一定有更好的方法”,请告诉我。我想我们都同意上述方法比针对 navigator.userAgent 测试正则表达式更好,对吧?

标签: javascript firefox4 browser-detection


【解决方案1】:

这是否适合您的特征检测由您决定。如果您认为测试FormData 的存在就足够了;那就去吧。

您也可以“增加”您检查的功能。您也可以查找window.URL,以及new feature in Firefox 4

if (!!window.FormData && !!window.URL) {

    //We have Firefox4+

}

因此,现在有人宣布 both 的几率会更低。如果你足够信任你的用户而不改变他们,你也可以让用户代理参与进来。

【讨论】:

  • 我喜欢您结合测试以降低野外误报机会的方法。谢谢!
【解决方案2】:

window.history.pushState 是您可以检查的另一个。 我认为我们可以整天使用 FF4+ 中出现的功能而不是 FF3.x。

【讨论】:

    【解决方案3】:

    假设我对与任何相关的常见风险感到满意 浏览器嗅探方法,你能看出这有什么问题吗?

    他们删除前缀的那一刻就会中断。
    所有-moz- properties 标记的过时证明都证明了这一事实。
    所以请记住,您必须使用 || 不断添加最近的 Mozilla 扩展。

    【讨论】:

    • -moz-appearance 是 XUL 平台的一部分,用于使用基于操作系统的本机控件呈现元素。这极不可能标准化。所以前缀会一直存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2011-07-08
    相关资源
    最近更新 更多