测验

特性检测、特性推断和使用 UA 字符串有什么区别?

主题
浏览器JavaScript

特性检测

特性检测涉及确定浏览器是否支持某段代码,并根据是否支持运行不同的代码(或不支持),以便浏览器始终提供工作体验,而不是在某些浏览器中崩溃/出错。例如:

if ('geolocation' in navigator) {
// 可以使用 navigator.geolocation
} else {
// 处理缺少的功能
}

Modernizr 是一个处理特性检测的好库。

特性推断

特性推断像特性检测一样检查特性,但使用另一个函数,因为它假定它也将存在,例如:

if (document.getElementsByTagName) {
element = document.getElementById(id);
}

这真的不推荐。特性检测更万无一失。

UA 字符串

这是一个浏览器报告的字符串,它允许网络协议对等方识别请求软件用户代理的应用程序类型、操作系统、软件供应商或软件版本。可以通过 navigator.userAgent 访问它。但是,该字符串很难解析,并且可以被欺骗。例如,Chrome 报告为 Chrome 和 Safari。因此,要检测 Safari,您必须检查 Safari 字符串以及 Chrome 字符串的缺失。避免使用此方法。

练习

检验你的理解
测试版
检验你的理解 练习
检验你的理解 练习

Code should use navigator.geolocation when available and provide an address field otherwise. Which branching strategy tests the required capability directly?