//浏览器判断 (function(){ window.sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua.match(/msie([\d.]+)/)) ? sys.ie = s[1] : (s = ua.match(/firefox([\d.]+)/)) ? sys.firefox = s[1] : (s = ua.match(/chrome([\d.]+)/)) ? sys.chrome = s[1] : (s = ua.match(/opera\/.*version\/([\d.]+)/)) ? sys.opera= s[1] : (s = ua.match(/version\/([\d.]+).*safari/)) ? sys.safari= s[1] : 0; })(); alert(window.sys.ie);
每个ua alert都有值,正则木有错。但在浏览器实战检测,都是undefined,比如ie,。。。
可以看看,以前写的
var browser = { versions : function() { var u = navigator.userAgent, app = navigator.appVersion; return { //移动终端浏览器版本信息 trident : u.indexOf('Trident') > -1, //IE内核 presto : u.indexOf('Presto') > -1, //opera内核 webKit : u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核 gecko : u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核 mobile : !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端 ios : !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端 android : u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器 iPhone : u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器 iPad : u.indexOf('iPad') > -1, //是否iPad webApp : u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部 }; }(), language : (navigator.browserLanguage || navigator.language) .toLowerCase() }
试着用于生产环境了。
@Coca-code: 其实还想问问在用?是不是这样用 if(browser.versions()["trident"] || browser.versions()["presto"] || ...) {
// to do
};
你先试试把alert写到按钮里面去,感觉好像是执行顺序的问题。
有几个问题:
1.正则错误:/msie这里有个空格([\d.]+)/,FireFox那里也是,Chrome没测
2.IE的正则无法判断IE 11
现在这种做法已经不推荐了,一般用特性侦测,而不是直接去判断浏览器。
愿闻其详。。
@Coca-code: 因为现在浏览器一把都会自动更新,很多特性这个版本没有,下个版本就有了,所以光靠判断浏览器已经不合适了。
所谓特性侦测就是先判断浏览器是否有这个特性,然后在针对这个特性写代码。
if(window.localStorage){
//Use local storage do something...
}
@幻天芒: 无非要知道是什么端,如果是移动端,用的什么浏览器(内核),最好判断出遨游,qq,safari,猎豹等。
这个还要一个和去研究什么浏览器有什么特性...最好ctrl + c,ctrl + v的资源
@Coca-code: 最近看js进阶教程,正对特性,js还能处理linux浏览器,还能侦测系统,浏览器版本,浏览器名称,全部放在了 var client = {};里了。有这方面好书推荐吗,大神。。