最近公司刚好有一些需要在 IPAD 上运行的视频。需要做对象平台检测,拜读了尼古拉斯大神的《JavaScript 高级程序设计(第二版)》之后刚好觉得代码完全可以用上来。就直接上了,这本书真的非常不错,作为前端工程师如果没有的话,强烈建议去买一本瞅瞅。
检测代码如下:
var client = function(){
var engine = {
ie:0,
gecko:0,
webkit:0,
khtml:0,
opera:0,
//具体的版本
ver:null
};
var browser = {
ie:0,
firefox:0,
konq:0,
opera:0,
chrome:0,
safari:0,
ver:null
};
var system = {
win:false,
mac:false,
x11:false,
//移动设备
iphone:false,
ipod:false,
nokiaN:false,
winMobile:false,
macMobile:false,
//游戏设备
wii:false,
ps:false
};
//浏览器对象和平台检测
var ua = window.navigator.userAgent;
//首先检测 Opear
if(window.opera){
engine.ver = browser.ver = window.opera.version();
engine.opera = browser.opera = parseFloat(engine.ver);
}
//其次检测 Webkit 浏览器,基于版本过多的原因。
else if(/AppleWebKit\/(\S+)/.test(ua)){
engine.ver = RegExp["$1"];
engine.webkit = parseFloat(engine.ver);
//确定是 Chrome
if(/Chrome\/(\S+)/.test(ua)){
browser.ver = RegExp["$1"];
browser.chrome = parseFloat(browser.ver);
}
//确定是 Safari 浏览器
else if(/Version\/(\S+)/.test(ua)){
browser.ver = RegExp["$1"];
browser.safari = parseFloat(browser.ver);
}else{
//进似的确定版本号
var safariVersion = 1;
if(engine.webkit < 100){
safariVersion = 1;
}else if(engine.webkit < 312){
safariVersion = 1.2;
}else if(engine.webkit < 412){
safariVersion = 1.3;
}else{
safariVersion = 2;
}
browser.safari = browser.ver = safariVersion;
}
}
//检测 KHTML
else if(/KHTML\/(\S+)/.test(ua)||/Konqueror\/([^;]+)/.test(ua)){
engine.ver = browser.ver = RegExp["$1"];
engine.khtml = browser.konq = parseFloat(engine.ver);
}
//检测 Gecko
else if(/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){
engine.ver = RegExp["$1"];
engine.gecko = parseFloat(engine.ver);
//确定是否 FIREFOX
if(/Firefox\/(\S+)/.test(ua)){
browser.ver = RegExp["$1"];
browser.firefox = parseFloat(browser.ver);
}
}
//最后一个检测 IE
else if(/MSIE ([^;)]+)/.test(ua)){
engine.ver = browser.ver = RegExp["$1"];
engine.ie = browser.ie = parseFloat(engine.ver);
}
var p = window.navigator.platform;
system.win = p.indexOf("Win") == 0;
system.mac = p.indexOf("Mac") == 0;
system.x11 = (p.indexOf("X11") == 0 || p.indexOf("Linux") == 0);
// Windows 版本
if(system.win){
if(/Win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/.test(ua)){
if(RegExp["$1"]=="NT"){
switch(RegExp["$2"]){
case "5.0":
system.win = "2000";
break;
case "5.1":
system.win = "XP";
break;
case "6.0":
system.win = "Vista";
break;
case "6.1":
system.win = "Win 7";
break;
default:
system.win = "NT";
break;
}
}
else if(RegExp["$1"] == "9x"){
system.win = "ME";
}else{
system.win = RegExp["$1"];
}
}
};
//检测是否移动平台
system.iphone = ua.indexOf("iPhone") > -1;
system.ipod = ua.indexOf("iPod") > -1;
system.macMobile = (system.iphone || system.ipod);
system.nokiaN = ua.indexOf("NokiaN") > -1;
system.winMobile = (system.win == "CE");
//检测游戏设备
system.wii = ua.indexOf("Wii") > -1;
system.ps = /playstation/i.test(ua);
//返回检测对象
return {
engine:engine,
browser:browser,
system:system
}
}();
for(var i in client){
document.write("-------------"+i+" 对象 ");
for(var j in client[i]){
var obj = client[i];
document.write(j+" is: "+obj[j] + "\n");
}
document.write("-----------------------------------------------------------------");
}