ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

客户端检测——能力检测

2019-07-28 12:00:51  阅读:110  来源: 互联网

标签:sort function 浏览器 检测 能力 return document id 客户端


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

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

标签:sort,function,浏览器,检测,能力,return,document,id,客户端
来源: https://blog.csdn.net/weixin_44220680/article/details/97612012

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有