使用js判断5大浏览器版本、引擎和所在系统方法

       最近写个项目,需要判断用户使用浏览器的版本是否符合系统所需最低版本要求,然后引导用户跳转到相应地址下载新版本浏览器。在网上搜了一圈,基本很难有符合要求的代码,想起之前看过的《JavaScript高级程序设计》这本书有涉及过,因此找出来,并在它的代码上进行修改。

主要改动有两个:

1. Opera 15之后转投Webkit;

2. IE 11的UserAgent跟之前版本的规则不一样。


ps:后续微软出Edge的话,这里还需要持续改进。

var client = function(){
<span style="white-space:pre">	</span>\\内核
	var engine={
		ie:0,
		gecko:0,
		webkit:0,
		khtml:0,
		opera:0,

		//version
		ver :null
	};
<span style="white-space:pre">	</span>\\浏览器版本
	var browser = {
		ie:0,
		firefox:0,
		safari:0,
		kongq:0,
		opera:0,
		chrome:0,

		ver:null
	};
<span style="white-space:pre">	</span>\\所在系统
	var system = {
		win:false,
		mac:false,
		x11:false,

		iphone:false,
		ipod:false,
		ipad:false,
		ios:false,
		android:false,
		nokiaN:false,
		winMobile:false,

		wii:false,
		ps:false
	};

	var ua = navigator.userAgent;
	if(window.opera){//旧版本的opera用自己的引擎,但是opera 15转投Webkit了,所以这里失效
		engine.ver = browser.ver = window.opera.version();
		engine.opera = browser.opera = parseFloat(engine.ver);
	}else if(/AppleWebKit\/(\S+)/.test(ua)){
		engine.ver = RegExp["$1"];
		engine.webkit = parseFloat(engine.ver);

		if(/OPR\/(\S+)/.test(ua)){//Opera 15以上版本判断方法
			browser.ver = RegExp["$1"];
			browser.opera = parseFloat(browser.ver);
		}
		else if(/Chrome\/(\S+)/.test(ua)){
			browser.ver =  RegExp["$1"];
			browser.chrome = parseFloat(browser.ver);		
		} 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;
		}
	}else if(/KHTML\/(\S+)/.test(ua)||/Konqueror\/([^;]+)/.test(ua)){
		engine.ver = browser.ver = RegExp["$1"];
		engine.khtml = browser.konq = parseFloat(engine.ver);
	}else if(/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){
		engine.ver = RegExp["$1"];
		engine.gecko = parseFloat(engine.ver);

		if(/Firefox\/(\S+)/.test(ua)){
			browser.ver = RegExp["$1"];
			browser.firefox = parseFloat(browser.ver);
		}
	}else if(/MSIE ([^;]+)/.test(ua)||/Trident\/[^"]*rv:([^\s,^\)]+)/.test(ua)){
		//这里加上IE11的情况。后续还需要考虑微软新的Edge
		engine.ver = browser.ver =RegExp["$1"];
		engine.ie = browser.ie = parseFloat(engine.ver);
	}

	browser.ie = engine.ie;
	browser.opera = engine.opera;

	// check platform
	var p = navigator.platform;
	system.win = p.indexOf("Win")==0;
	system.mac = p.indexOf("Mac")==0;
	system.x11 = (p=="xll")||(p.indexOf("linux")==0);

	//check 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 = "7";
						break;
					default:
						system.win = "NT";
						break;
				}
			}else if (RegExp["$1"]=="9x"){
				system.win = "ME";
			}else{
				system.win = RegExp["$1"];
			}
		}
	}

	//moblie Device
	system.iphone =ua.indexOf("iphone")>-1;
	system.ipad=ua.indexOf("iPod")>-1;
	system.ipad = ua.indexOf("iPad")>-1;
	system.nokiaN = ua.indexOf("nokiaN")>-1;

	//windows moblie
	if(system.win =="CE"){
		system.winMobile = system.win;
	}else if (system.win == "Ph"){
		if(/Windows Phone OS (\d+.\d+)/.test(ua)){
			system.win = "phone";
			system.winMobile = parseFloat(RegExp["$1"]);
		}
	}

	//check IOS Version
	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;//guest one version
		}
	}

	//check android
	if(/Addroid (\d+\.\d+)/.test(ua)){
		system.android = parseFloat(RegExp.$1);
	}

	//Game sys
	system.wii = ua.indexOf("Wii")>-1;
	system.ps = /playstation/i.test(ua);

	return{
		engine: engine,
		browser: browser,
		system:system
	}
}()


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值