9. 客户端检测
人们总是提出浏览器应该支持一些公共功能,但是现实是,浏览器有各自的“怪癖”。
9.1 能力检测
- 能力检测的目标不是识别特定浏览器,而是识别浏览器的能力。采用这种方式不必顾及特定的浏览器如何如何,只要确定浏览器支持特定的能力,就可以给出解决方案。
// 能力检测的基本模式
if(object.property){
// use object.property
}
typeof检测是否是函数DOM对象是宿主对象- 能力检测,而不是浏览器检测,不注重是什么浏览器,而注重浏览器具有什么能力
9.2 怪癖检测
quirks detection识别浏览器的特殊行为(怪癖?bug?)
// IE8以前:实例属性,遇到原型上[[Enumerable]]==false的同名属性,会错误地不出现在for-in循环中
function hasDontEnumQuirks(){
var obj = {toString: function(){}};
for(let key in obj){
if(key === 'toString'){
return fasle;
}
}
return true;
}
// Safari3以前:会枚举[[Enumerable]]==false的属性
function hasEnumShadowQuirks(){
var obj = {toString: function(){}};
var count = 0;
for(let key in obj){
if(key === 'toString'){
count++;
}
}
return count > 1;
}
9.3 用户代理检测
userAgent用户代理通过检测用户代理字符串来确定实际使用的浏览器- 在每一次HTTP请求过程中,用户代理字符串是作为响应头部发送的
- 用户代理字符串历史
- 早期浏览器
- 1993,NCSA,世界第一款浏览器
Mosaic - NetScape Communications,
Mozilla(mosaic killer)
- 1993,NCSA,世界第一款浏览器
- NetscapeNavigator 3 和 Internet Explorer 3
- Internet Explorer,通过用户代理字符串
Mozilla/2.0伪装成NetscapeNavigator
- Internet Explorer,通过用户代理字符串
- Netscape Communicator 4 和 IE4~IE8
- trident
Gecko呈现引擎- Netscape 6
Mozilla/5.0
- WebKit
- 2003,
Apple宣布开发Safari,呈现引擎叫WebKit,是Linux平台中Konqueror浏览器的呈现引擎KHTML的一个分支 - 如何确保不被流行站点拒之门外 —>
Mozilla/5.0 - 至今,基于
webkit的所有浏览器都将自己标识为Mozilla/5.0
- 2003,
- Konqueror
- KHTML
- 效仿IE,
Mozilla/5.0
- Chrome
- 以Webkit作呈现引擎,但适用不同的JavaScript引擎
- Opera
Opera/8.0 (Windows NT 5.1; U; en)最合理的用户代理字符串presto是opera的呈现引擎- 隐瞒身份
- ios和android
- 默认基于webkit
- 早期浏览器
- 用户代理字符串检测技术
- 识别呈现引擎:IE、Gecko、Webkit、KHTML、Opera
- 识别浏览器:ie、chrome、Firefox、opera、Safari
- 识别平台:windows,mac,unix
- 识别
windows - 识别移动设备
windows最早有两种版本,分家庭版和商业版。针对家庭版的是
Windows95、Windows98和Windows ME。
而针对商业用户的版本则一直是Windows NT,最后由于市场原因,更名Windows 2000。
这两个产品线后来又合并成一个由Windows NT发展而来的代码基,代表产品就是Windows XP。
随后,微软又在XP基础上构建了Windows Vista
| windows版本 | 常见用户代理字符串 |
|---|---|
| 95 | Win95 |
| 98 | Win98 |
| NT4.0 | WinNT4.0 |
| 2000 | Windows NT 5.0 |
| ME | Win 9x 4.90 |
| XP | Windows NT 5.1 |
| Vista | Windows NT 6.0 |
| 7 | Windows NT 6.1 |

京公网安备 11010502036488号