JavaScript
- 九、客户端检测
- 9.1 能力检测
- 9.1.1 更可靠的能力检测
- 9.1.2 能力检测,不是浏览器检测
- 9.2 怪癖检测
- 9.3 用户代理检测
- 9.3.1 用户代理字符串的历史
- 9.3.2 用户代理字符串检测技术
- 9.3.2.1 识别呈现引擎
- 9.3.2.2 识别浏览器
- 9.3.2.3 识别平台
- 9.3.2.4 识别Windows操作系统
- 9.3.2.5 识别移动设备
- 9.3.2.6 识别游戏系统
- 9.3.3 完整的代码
- 9.3.4 使用方法
九、客户端检测
- 背景
- 各浏览器间的差异造成部分功能不一致的表现
- 针对不同浏览器的类型,定制不同的方式实现功能
9.1 能力检测
识别浏览器能力
- 先检测达成目的的最常用的特性
- 必须测试实际要用到的特性,而不是根据某一特性推断另一特性是否存在
9.1.1 更可靠的能力检测
- 如果想要检测浏览器是否具有某项功能,不是测试浏览器是否具有某个名称的属性,而是测试该名称的属性是否是函数类型
function isHostMethod(object,property){
var t=typeof object[property];
return t=='function' || (!!(t=='object' && object[property]))||t=='unknown';
}
9.1.2 能力检测,不是浏览器检测
9.2 怪癖检测
识别浏览器缺陷
9.3 用户代理检测
通过检测用户代理字符串确定实际使用的浏览器
- 客户端 navigator.userAgent
- 服务端 http的请求头
9.3.1 用户代理字符串的历史
- 用户代理字符串本应作为应用程序(浏览器)的标识
- 但新出现的浏览器为了挤占市场,提高用户数量,伪装成市场占有量高的浏览器
- 网站开发者对市场占有量高的浏览器有较好的支持
9.3.2 用户代理字符串检测技术
9.3.2.1 识别呈现引擎
- IE
- Gecko
Firefox浏览器 - WebKit
Safari、Chrome浏览器,不同的javascript引擎,WebKit是KHTML的一个分支独立 - KHTML
Linux的Konqueror浏览器 - Opera
Opera浏览器
9.3.2.2 识别浏览器
9.3.2.3 识别平台
- Windows
- Mac
- Unix
9.3.2.4 识别Windows操作系统
9.3.2.5 识别移动设备
9.3.2.6 识别游戏系统
任天堂等游戏系统上的web浏览器
9.3.3 完整的代码
9.3.4 使用方法
- 用户代理检测是客户端检测的最后一个选择