javascript - 哪个是检测客户端用户代理的更好方法?

标签 javascript ruby-on-rails ruby

我感兴趣的是,哪个位置是检测客户端的用户代理、客户端 (javascript) 或服务器端的最佳位置?我提出这个问题是因为一些 IE8 用户收到一条消息说他们正在使用 IE6。

最佳答案

简短而正确的答案是:不要使用任何依赖于 UserAgent 嗅探的东西。

为了能够可靠地调整代码路径,您应该测试调整代码路径的特定“事物”,主要是功能。这叫做 Feature Detection .

因此,如果功能 X 受支持,我们就这样做,否则我们就那样做。

根据存在的 UserAgent 推断是否支持某个功能将很快失败,尤其是当新浏览器出现时。
就拿下面这个例子来说,其实在几大类库中都能找到(!)

if (isIE8) {
    // use new feature provided by IE8
} else if (isIE7) {
    // use not so new feature provided by IE7 (and IE8)
} else {
    // use fallback for all others (which also works in IE7 and IE8)
}

您认为 IE9 出现后会发生什么?

在这种情况下正确的模式是

if ("addEventListener" in foo) {
    // use DOM level 2 addEventListener to attach events
    foo.addEventListener(...
} else if ("attachEvent" in foo) {
    // use IE's proprietary attachEvent method
    foo.attachEvent(...
} else {
    // fall back to DOM 0
    foo["on" + eventName] = ....
}

关于javascript - 哪个是检测客户端用户代理的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2968731/

相关文章:

javascript - 应该使用哪个捆绑系统 AMD、CommonJS、ES Module、IIFE、UMD 和 SystemJS

c# - 关于如何更新 DOM 但使用隐藏代码检查数据的问题

sql - HABTM多 "and"查询

javascript - ant design - 在 "cancel"和 "X"关闭按钮上重置模态值 - API RESPONSE BASE REACT JS

JavaScript 字符串用多个定界符拆分,同时保留定界符

sql - Rails 5. 范围链中的错误结果

ruby-on-rails - 将类添加到 Rails 5 中的 bootstrap_form_for collection_select

ruby - 如何用ruby解析word文档?

ruby 连接到 SQL Server 2005

ruby - 如何使用 Ruby 正则表达式从字符串中提取重复字符序列?