什么's特征检测、特征推断和使用UA字符串之间的区别
What's the difference between feature detection, feature inference, and using the UA string
我最近在一次面试中被问到这个问题,特别是关于Javascript。我想知道该怎么回应。
feature detection
、feature inference
和使用User agent
字符串之间究竟有什么区别?
特征检测检查特征是否存在,例如:
if (window.XMLHttpRequest) {
new XMLHttpRequest();
}
特征推理检查一个特征,就像特征检测一样,但使用另一个函数,因为它假设它也会存在,例如:
if (document.getElementsByTagName) {
element = document.getElementById(id);
}
检查UA字符串是一种古老的做法,不应该再使用了。您不断更改UA检查,从未从新实现的功能中获益,例如:
if (navigator.userAgent.indexOf("MSIE 7") > -1){
//do something
}
特征检测:实际检查特征是否存在
if('localStorage' in window)
特征推断:如果x存在,我们可以假设y存在
if('localStorage' in window){
window.sessionStorage.setItem("this-should-exist-too", 1);
}
如果你依赖用户代理,那么你必须有一个浏览器X支持功能Y 的地图
功能检测正在尝试确定是否存在某个功能。例如,如果用户的浏览器支持LocalStorage或地理定位API。
if (navigator.geolocation) {
// geolocation possible.. do some stuff
}
特征推断是假设因为检测到一个特征,所以可以使用其他特征。例如,如果您检测到地理位置API,您可能会假设您的用户在现代浏览器上,因此现在LocalStorage可用假设通常是不好的,所以您最好只对每个想要利用的功能使用功能检测,并在某个功能不可用的情况下制定后备策略。即使用户有一个带地理位置的现代浏览器,也不意味着他们会允许你的应用程序使用它,所以要相应地计划。
用户代理字符串只是读取每个浏览器发送的愚蠢的小字符串,然后您可以将该字符串与您所针对的一些已知浏览器进行比较。一般来说,这是一种非常古老的做事方式,很容易被欺骗,所以你必须有一个非常具体的理由想要走这条路(可能是在负载测试环境或其他环境中)。查看主题的wikihttp://en.wikipedia.org/wiki/User_agent
你可以用类似于的javascript访问它
navigator.userAgent
- 如何在JavaScript中将字符串转换为函数引用
- jQuery中是否内置了任何字符串格式化函数
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- ng打开空字符串
- 正则表达式在字符串中找到base64
- 如何将字符串值从php页面发送到java脚本页面
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 对id以某个字符串开头的元素进行计数
- Javascript逻辑运算符和字符串/数字
- 反向字符串比较
- 如何有效地将游戏数据存储在URL查询字符串中
- 可变大小的JavaScript字符串如何成为基元类型
- 将DOM节点值与字符串Javascript进行比较
- 如何在 Javascript 中将变量的值从字符串转换为整数
- 本地存储中的字符串到字节数组转换
- JavaScript按钮/输入/函数,字符串反转
- 从查询字符串参数推断出正确的数据类型
- 高亮显示与数组字符串一起使用时文本插件中断
- 什么's特征检测、特征推断和使用UA字符串之间的区别