客户端检测——能力检测

本文探讨了浏览器之间的不一致性问题,介绍了能力检测的概念及其应用。通过具体实例,展示了如何通过能力检测来识别并利用浏览器支持的功能,以实现跨浏览器的兼容性。

浏览器提供商虽然在实现公共接口方面投入了很多精力。但结果仍然是每一种浏览器都有自己的长处和缺点。即使是跨平台的浏览器,虽然从技术上看版本相同,也照样存在不一致性问题。面对这种问题,我们程序员能怎么办呢——giao你你有脾气吗?

那么我们能做什么呢?我们只能找办法解决嘛~~
解决方法不唯一,今天给大家讲一下最常用也最被人们接受的客户端检测形式——能力检查

能力检测

能力检测的目标不是识别特定的浏览器,而是识别浏览器的功能。就好像售货员卖东西不看你是谁,而看你有没有足够的钱一样。能力检测的基本模式如下:

	if(object.propertyInQuestion){
		//使用object.propertyInQuestion
	}
	//上面方法意思,用if进行判断,如果有这个功能,使用这个功能。

实例如下:

	function getElement(id){
		if(document.getElementById){			//判断是否有这个方法
			return 	document.getElementById(id);//有,调用这个方法
		}else{
			return 	document.all(id);			//没有,调用document.all(id)
		}
	}

实例解读:IE5.0之前,浏览器并不支持document.getElementById()的方法。不过可以通过document.all属性实现相同的目的。所以就有了上面的能力测试代码。

需要注意的是:进行能力测试的时候,需要先判断最常用的方法。
如下:虽然也是能力测试,但是先判断不常用的,就会造成很多问题。

	function getElement(id){
		if(document.all){						//判断是否有这个方法
			return 	document.all(id);			//有,调用这个方法
		}else{
			return 	document.getElementById(id);//没有,调用ById方法
		}
	}

第二个需要注意的是:进行能力测试,一定要测试实际要用到的特性。一个特性存在,不一定意味着另一个属性也存在。就好像商店卖可乐,并不代表他就卖雪碧一样。

如下:

	function getWindowWidth(){
		if(document.all){									//判断是否是ie浏览器
			return 	document.documentElement.clientWidth;	//有,调用这个方法
		}else{
			return 	window.innerWidth;						//没有,此方法
		}
	}

如上,支持浏览器document.all的不只有IE,Opera也支持,就会产生问题。

更可靠的能力测试

能力测试对于想知道某个特性是否会按照特定方式行事也很有用。有时候我们需要更精确的进行查询,

如下:

	function isSortable(object){
		return !!object.sort;			//如果参数属性有sort,就会返回true。
	}

以上方法能判断对象是否有sort属性,但是并不能判断这个属性是否为我们想要的sort属性。
就好像你知道商店卖辣条,于是你兴高采烈的去了,却发现卖的辣条里面没有你想买的卫龙一样。 所以我们需要更加精确的能力测试。

检测sort这个属性是否存在还不够,我们还需要检测这个sort是不是一个函数,如下:

	function isSortable(object){
		return typeof object.sort == "function";
	}

如上,这样就会更精确的检测,避免不必要的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值