哪种方法可以更好地检测客户端的用户代理?

wes*_*que 2 javascript ruby ruby-on-rails

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

Sea*_*sey 8

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

为了能够可靠地调整代码路径,您应该测试代码路径调整的特定"事物",主要是功能.这称为特征检测.

因此,如果支持功能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)
}
Run Code Online (Sandbox Code Playgroud)

当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] = ....
}
Run Code Online (Sandbox Code Playgroud)

  • em ..删除它?代码应该使用特征检测而不是UserAgent Sniffing来调整其代码路径 (2认同)

Mat*_*nen 5

双方可用的用户代理应该是相同的,除非有一些有趣的东西,通常不是.

如果您想向IE6用户显示消息,我建议您使用条件 注释.它们是IE特有的功能,非常适合检测IE版本.