客户端检测
1,能力检测
目标是识别浏览器的能力
例如
function.getElement(id){
  if(document.getElementById){//测试这个方法是否存在
   return document.getElementById(id);
}else if(document.all){//测试document.all是否存在
 return document.all[id];
}else{
  throw new Error("NO");
}
}
//getElement()函数的用途是返回具有给定ID的元素。

测试实际要用到的特性
注:一个特性存在不一定意味着另一个特性也存在
//检测某个对象是否存在排序,最好的方式是检测sort是不是一个函数。
//这样更好的检测sort是不是函数
function isSortable(object){
 return typeof object.sort=="function";//IE8之前返回的是object
}

//检测时,最好为能力检测,而不是浏览器检测
正确的例子
//确定浏览器是否支持Netscape风格的插件
var hasNSPlugins=!!(navigater.olugins&&navigater.plugins.length);
//确定浏览器是否支持DOM1级规定的能力
var hasDOM1=!!(document.getElementById&&document.createElement&&document
   &&document.getElementsByTagName);

怪癖检测
检测浏览器的缺陷

检测处理bug一
var hasDontEnumQuirk=function(){
var o=(toString:function()());
if(prop=="toString"){
return false;
}
}
returntrue;
}();

用户代理检测
在服务器端,通过检测用户代理字符串来确定用户
使用的浏览器是一种常用且广为接受的做法。
在可户端,用户代理检测一般被当作一种万不得以才用的做法

用户代理字符串的历史
HTTP规范明确规定,浏览器应该发送简短的用户代理字符串,指明浏览器
的名称和版本号。

用户代理字符串检测技术
//确定浏览器信息
if(ieVer>=6){
//代码
}

1.识别呈现引擎


var client=function(){
 var engine={//局部变量,在这个对象字面量中,每个呈现引擎都对应着一个属性,属性的默认值为0;
                       //如果,检测到了那个呈现引擎,那么就以浮点数值型式将该引擎的版本号写入相应的属性。

  //呈现引擎
  ie:0,
gecko:0,
webkit:0,
kntml:0,
opera:0,
//具体的版本
var :null
};
//在检测呈现引擎,平台和设备
return{
 engine:engine
};
){};

在检测到一个呈现引擎之后,其client.engine中对应的属性被设置为一个大于0的值

if(client.engine.ie){//如果是IE,client.ie的值应该大于0;
//针对IE的代码
}else if(client.engin.geck0>1.5){
 if(client.engin.var=="1.8.1"){
 //针对这个版本执行某些操作
}
}

识别呈现引擎,检测顺序要正确
第一步是识别Opera,
if(window.opera){
 engine.var=window.opera.version();//调用version()方法可以返回一个表示浏览器版本的字符串
engin.opera=parseFloat(engine.var);//将浮点数值保存在engine.opera中
}
//如果浏览器是Opera,测试window.opera就会返回true;


WebKit的用户代理字符串中的“AppleWebKit”是独一无二的。故检测这个字符串最合适

识别浏览器


var client=function(){
 var engine={//局部变量,在这个对象字面量中,每个呈现引擎都对应着一个属性,属性的默认值为0;
                       //如果,检测到了那个呈现引擎,那么就以浮点数值型式将该引擎的版本号写入相应的属性。

  //呈现引擎
  ie:0,
gecko:0,
webkit:0,
kntml:0,
opera:0,
//具体的版本
var :null
};
var browser={//私有变量,保存浏览器的属性。与engine变量一样,除了当前使用的浏览器,其他属性的值将保存为0;
//浏览器
ie:0,
firefox:0,
safarl:0,
konq:0,
opera:0,
chrome:0,
//具体的版本
var :null
};
//在检测呈现引擎,平台和设备
return{
 engine:engine,
browser:browser,
};
){};
3.识别平台


var client=function(){
 var engine={//局部变量,在这个对象字面量中,每个呈现引擎都对应着一个属性,属性的默认值为0;
                       //如果,检测到了那个呈现引擎,那么就以浮点数值型式将该引擎的版本号写入相应的属性。

  //呈现引擎
  ie:0,
gecko:0,
webkit:0,
kntml:0,
opera:0,
//具体的版本
var :null
};
var browser={//私有变量,保存浏览器的属性。与engine变量一样,除了当前使用的浏览器,其他属性的值将保存为0;
//浏览器
ie:0,
firefox:0,
safarl:0,
konq:0,
opera:0,
chrome:0,
//具体的版本
var :null
};
var system={\\浏览器一般只报告Windows版本,system的每个属性最初都保存这布尔值false;
 win:false,
mac:false,
x11:false
};
//在检测呈现引擎,平台和设备
return{
 engine:engine,
 browser:browser,
system:system
};
){};
//检测平台的代码
var p=navigator.platform;
system.win=p.indexOf("Win")==0;
system.mac=p.indexOf("Mac")==0;
system.x11=(p.indexOf("Win")==0)||(p.indexOf("Mac")==0);

//识别移动设备

var client=function(){
 var engine={//局部变量,在这个对象字面量中,每个呈现引擎都对应着一个属性,属性的默认值为0;
                       //如果,检测到了那个呈现引擎,那么就以浮点数值型式将该引擎的版本号写入相应的属性。

  //呈现引擎
  ie:0,
gecko:0,
webkit:0,
kntml:0,
opera:0,
//具体的版本
var :null
};
var browser={//私有变量,保存浏览器的属性。与engine变量一样,除了当前使用的浏览器,其他属性的值将保存为0;
//浏览器
ie:0,
firefox:0,
safarl:0,
konq:0,
opera:0,
chrome:0,
//具体的版本
var :null
};
var system={\\浏览器一般只报告Windows版本,system的每个属性最初都保存这布尔值false;
 win:false,
mac:false,
x11:false
//移动设备
iphone:false,
ipod:false,
ipad:false,
ios:false,
android:false,
nokiaN:false,
winMobile:false,
//识别游戏系统
wii:false,
ps:false
};//在此检测呈现引擎,平台和设备。

//在检测呈现引擎,平台和设备
return{
 engine:engine,
 browser:browser,
system:system
};
){};
通常简单的检测字符串”iPhone“,”iPod“,”iPad“
就可以设置相应属性
system.iphone=ua.indexOf("iPhone")>-1;
system.ipod=ua.indexOf("iPod")>-1;
system.ipad=ua.indexOf("iPad")>-1;
//检测ios版本
if(system.mac&&ua.indexOf("Mobile")>-1){
if(/CPU(?:iphone)?OS(\d+_\d+)/.test(ua)){
system.ios=parseFloat(RegExp.$1.replace("_","."));
}else{
system.ios=2//不能真正的检测出来。
}
}

10-03 17:38