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 使用方法

  • 用户代理检测是客户端检测的最后一个选择