客户端检测
因为各个浏览器是不同的,面对不一致的问题,我们可以选择客户检测端的方法来解决这个问题。
1. 能力检测
目标不是识别特定的浏览器,而是识别浏览器的能力。先检测达成目的最常用的特性,保证代码优化。保证测试的实用性,一个特性存在,不意味着另一个特性也存在。
-
更可靠的能力检测
function isHostMethid(obj,pro) { var t=typeof(obj[pro]); alert(t); return t=='function'|| //t可能是一个函数 (!!(t=='object'&&object[pro]))|| t=='unkmow'; //用typeof检测ActiveX对象 }
2.怪癖检测
目标是识别浏览器的特殊行为,与能力检测不同,怪癖检测是为了检测浏览器存在实名缺陷。
//IE8及更早的版本存在的bug,如果某个示例属性与标记为[[DontEnum]]属性名相同,那么该实例属性不会出现在for-in循环中
var hasDontEnumQuirk=function(){
var o={toString:function(){}};
for(var prop in o){
if(prop=='toString'){
return false;
}
}
return true;
}
3.用户代理检测
用户代理检测是通过检测用户代理字符串来确定实际使用的浏览器。
在服务器端,通过用户代理字符串来确定用户使用的浏览器是一种常用的方法,而在客户端,用户代理被当做一种万不得已才使用的方法,优先级在能力检测和怪癖检测之后
因为历史原因及现代浏览器中用户代理字符串的使用方式,通过用户代理字符串来检测特定的浏览器并不容易,因为浏览器提供商会试图通过在用户代理字符串添加一些欺骗性信息,欺骗网站相信自己是另一个浏览器。要根据不同呈现引擎,平台,操作系统,移动设备,浏览器等来做不同的检测。
用户代理检测适用于下列情形:
- 不能直接准确的使用能力检测
- 同一款浏览器在不同平台下具备不同能力
- 为了跟踪分析等目的需要知道确切的浏览器