用户代理检测和特征检测之间的手段,好处和差异是什么?

Jit*_*yas 4 javascript css html5 mobile-website

用户代理检测和特征检测之间的手段,好处和差异是什么?哪一个更好?

请为两者提供示例.

Eli*_*Eli 6

使用特征检测而不是用户代理嗅探的主要原因是未来验证.

例如,假设您想要使用一些新的XMLHttpRequest 2.0功能(只是这样做).你知道IE不支持它但Firefox支持它,所以你在JS中有这样的代码:

if (!IE) {
    UseNewAjax();
} else {
    UseOldAjax();
}
Run Code Online (Sandbox Code Playgroud)

后来,IE的新版本出现了支持新功能,但由于你是代理嗅探器,你的IE浏览器无法在不更改代码的情况下获得此功能.

另一方面,如果你有特色检测:

if (document.hasCoolNewAjax) {
    UseNewAjax();
} else {
    UseOldAjax();
}
Run Code Online (Sandbox Code Playgroud)

您可以放心,如果浏览器支持以前没有的功能,他们可以立即开始使用这些功能,而您无需更改代码即可支持它.

浏览器/用户代理嗅探:使用编程语言确定访问者正在使用的浏览器,因此可以针对该浏览器编写特殊逻辑.效率低下并被认为是开发社区中的一种不良做法.

功能检测:使用编程语言确定浏览器是否支持特定功能.被认为是开发者社区的最佳实践,因为它是万无一失的,面向未来.

来自维基百科:

用户代理嗅探通常被认为是不好的做法,因为它鼓励特定于浏览器的设计并使用无法识别的用户代理标识惩罚新浏览器.相反,W3C建议创建标准的HTML标记,[引证需要]允许在尽可能多的浏览器中正确呈现,并测试特定的浏览器功能而不是特定的浏览器版本或品牌.

JavaScript不是用户代理嗅探或特征检测的唯一语言.例如,.NET框架具有允许您读取有关浏览器的各种信息的属性:

http://msdn.microsoft.com/en-us/library/3yekbd5b.aspx

http://modernizr.com