【JavaScript高级程序设计】第9章(客户端检测)

本文探讨了浏览器检测的不同方法,包括能力检测、怪癖检测和用户代理检测,重点介绍了如何识别浏览器支持的功能和特殊行为,以及如何通过用户代理字符串识别浏览器类型和版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)
    • NetscapeNavigator 3 和 Internet Explorer 3
      • Internet Explorer,通过用户代理字符串Mozilla/2.0伪装成NetscapeNavigator
    • 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
    • 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最早有两种版本,分家庭版和商业版。针对家庭版的是Windows95Windows98Windows ME
而针对商业用户的版本则一直是Windows NT,最后由于市场原因,更名Windows 2000
这两个产品线后来又合并成一个由Windows NT发展而来的代码基,代表产品就是Windows XP
随后,微软又在XP基础上构建了Windows Vista

windows版本常见用户代理字符串
95Win95
98Win98
NT4.0WinNT4.0
2000Windows NT 5.0
MEWin 9x 4.90
XPWindows NT 5.1
VistaWindows NT 6.0
7Windows NT 6.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值