我最近在一次工作面试中被问到这个问题,特别是关于 Javascript。我想知道正确的反应。
feature detection
,feature inference
和使用 User agent
字符串之间到底有什么区别?
我最近在一次工作面试中被问到这个问题,特别是关于 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 可用。假设通常是不好的,因此您最好对要利用的每个功能都使用功能检测,并在某个功能不可用的情况下制定后备策略。即使用户拥有具有地理定位功能的现代浏览器,也不意味着他们将允许您的应用使用它,因此请相应地进行计划。
用户代理字符串只是读取每个浏览器发送的愚蠢的小字符串,然后您可以将该字符串与您所针对的一些已知浏览器进行比较。一般来说,这是一种非常古老的做事方式,很容易被欺骗,所以你必须有一个非常具体的理由才能走这条路(可能是在负载测试环境或其他环境中)。请参阅主题http://en.wikipedia.org/wiki/User_agent的 wiki
您可以在 javascript 中访问它,类似于:
navigator.userAgent