嗅探 Firefox 4 及更高版本的方法

Posted

技术标签:

【中文标题】嗅探 Firefox 4 及更高版本的方法【英文标题】:Approach for sniffing Firefox 4 and higher 【发布时间】: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 测试正则表达式更好,对吧? 【参考方案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 平台的一部分,用于使用基于操作系统的本机控件呈现元素。这极不可能标准化。所以前缀会一直存在。

以上是关于嗅探 Firefox 4 及更高版本的方法的主要内容,如果未能解决你的问题,请参考以下文章

centos6.8上PHP5.3升级到PHP5.4及更高版本方法

pulltorefresh android 4.1及更高版本[重复]

Symfony 5.4 及更高版本中 getDoctrine() 的新替代方案

使用密钥库安卓。针对版本 18 及更高版本。必须使用已弃用的方法调用?

Liquibase 无法找到用于 4.0 及更高版本的集成测试的更改日志文件

iOS 7 及更高版本 (8.4) 中不推荐使用 SegmentedControlStyle | Xcode 6.4