【问题标题】:Feature detection (NOT user agent sniffing) to perform browser detection执行浏览器检测的特征检测(不是用户代理嗅探)
【发布时间】:2016-06-21 09:52:59
【问题描述】:

我们公司有一条业务规则,我们应该阻止我们的用户从未经我们的 QA 团队完全测试的浏览器访问我们的应用程序。此业务规则不可更改,我们的用户提前知道他们只能使用某些浏览器来使用我们的产品。

为了实现该业务规则,我正在寻找一个像 Modernizr 这样的网络库,它使用特征检测来检测浏览器。 Modernizr 是一个特征检测库,不是浏览器检测库,他们说过they won't add browser detection。

是否有任何库使用特征检测技术来验证用户代理字符串?

我宁愿不单独嗅探用户用户代理。如果我想做用户代理嗅探,我会使用Bowser 之类的东西。

预计解决方案不需要 100% 正确。解决方案只需要 90% 正确。

【问题讨论】:

  • 你是对的,代理嗅探不是答案,尽管几乎不可能创建你所追求的,因为浏览器比你想象的要多,而且有些浏览器在行为方面确实相同(尝试区分最新的 Opera、Chrome 和 Brave 之间的所有功能,它们都支持相同的 javascript 功能和 CSS 属性)。想象一下收集和维护这些数据所涉及的工作和数据,几乎每周都有新版本发布(Chrome/Firefox/Opera/Edge 是“常青树”,因此这些更新经常)
  • 我认为您误解了为什么不鼓励 UA 嗅探。在您的情况下,您实际上确实想要 UA 检测。
  • “预防”似乎激进
  • @charlietfl 我没有指定这个业务规则。

标签: javascript feature-detection browser-detection


【解决方案1】:

在您的情况下,您确实想要 UA 嗅探,因为您的 QA 团队正在 [比如说] Firefox 和 Internet Explorer 上进行测试,而您的企业想要禁止其他浏览器。但是,您可能已经了解了 UA 嗅探的所有缺点,浏览器可以欺骗其他浏览器的事实,难以维护最新列表,yadda yadda。多亏了 npm,您可以通过 useragent 等模块进行可靠且最新的 UA 嗅探和协调。

npm install useragent --save

如果您的 QA 团队实际上是在测试功能,并且您的业务规则是由合理且合乎逻辑的人编写的,那么您可以像我们其他人一样简单地使用功能检测。相反,您将在 2016 年阻止用户使用您的应用程序/网站,因为天真的项目所有者只想支持他/她喜欢的浏览器(sigh)。

编辑:如果你真的想给某人留下深刻印象,你可以编写在浏览器中实际执行的功能测试。您可以自动单击按钮/链接、填写表格并针对这些用户操作的副作用编写断言。例如,您可以使用无效凭据填写登录表单,单击提交,并期望显示“无效登录”错误消息。 Selenium 是一个非常流行的工具,但也有免费的开源工具,如 FuncUnit 和其他允许您执行此操作的工具。然后,您可以使用 browserstack 之类的东西在您选择的浏览器中运行这些测试。还有像Testee 这样的免费工具,它允许您拥有安装了所有受支持浏览器的机器,以便您可以在这些浏览器中启动功能测试。这既适用于本地,也适用于 Travis 等 CI 工具。

免责声明:我为构建和维护 FuncUnit 和 Testee 的公司工作 - 这些工具是免费和开源的,这不是为了宣传我们公司。

【讨论】:

  • 不知道如何才能真正防止欺骗
  • 你不能,至少不能来自服务器。大多数时候是机器人在恶搞,而且通常他们只是在一半恶搞,所以你仍然可以看出它是一个机器人。我认为像 useragent 这样的库会检查这一点,因为它们维护了一个详尽的 real UA 字符串列表。真正打击欺骗的唯一方法是客户端特征检测。
  • 那么像谷歌分析这样的统计程序如何非常确定地知道正在使用哪种浏览器、操作系统和设备?
  • 用户代理嗅探非常可靠,但缺点是您必须跟上它(浏览器不断变化......每天)。如果您的应用程序有一些硬编码的 UA 嗅探并且您不更新它,那么它基本上将在一段时间后无法工作。另一方面,谷歌每天都有团队更新其代码。如果您有能力始终掌控您的应用,请使用 UA 嗅探。
猜你喜欢
  • 1970-01-01
  • 2011-06-25
  • 2011-08-01
  • 2012-02-16
  • 2010-11-20
  • 2023-04-08
相关资源
最近更新 更多