首页 新闻 会员 周边

JavaScript代码的小小疑问(62)——userAgent检查不出错误..

0
悬赏园豆:5 [已解决问题] 解决于 2015-11-05 23:42
//浏览器判断 
(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,。。。

Coca-code的主页 Coca-code | 初学一级 | 园豆:10
提问于:2015-11-05 01:42
< >
分享
最佳答案
0

可以看看,以前写的

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()
    }
收获园豆:5
稳稳的河 | 老鸟四级 |园豆:4216 | 2015-11-05 17:55

试着用于生产环境了。

Coca-code | 园豆:10 (初学一级) | 2015-11-05 23:45

@Coca-code: 其实还想问问在用?是不是这样用  if(browser.versions()["trident"] || browser.versions()["presto"] || ...) {

// to do

}; 

Coca-code | 园豆:10 (初学一级) | 2015-11-07 19:57
其他回答(3)
0

你先试试把alert写到按钮里面去,感觉好像是执行顺序的问题。

Sola1 | 园豆:202 (菜鸟二级) | 2015-11-05 08:29
0

有几个问题:

1.正则错误:/msie这里有个空格([\d.]+)/,FireFox那里也是,Chrome没测

2.IE的正则无法判断IE 11

jello chen | 园豆:7306 (大侠五级) | 2015-11-05 09:01
0

现在这种做法已经不推荐了,一般用特性侦测,而不是直接去判断浏览器。

幻天芒 | 园豆:37175 (高人七级) | 2015-11-05 12:19

愿闻其详。。

支持(0) 反对(0) Coca-code | 园豆:10 (初学一级) | 2015-11-05 13:26

@Coca-code: 因为现在浏览器一把都会自动更新,很多特性这个版本没有,下个版本就有了,所以光靠判断浏览器已经不合适了。

所谓特性侦测就是先判断浏览器是否有这个特性,然后在针对这个特性写代码。

if(window.localStorage){

  //Use local storage do something...

}

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2015-11-05 15:01

@幻天芒: 无非要知道是什么端,如果是移动端,用的什么浏览器(内核),最好判断出遨游,qq,safari,猎豹等。

这个还要一个和去研究什么浏览器有什么特性...最好ctrl + c,ctrl + v的资源

支持(0) 反对(0) Coca-code | 园豆:10 (初学一级) | 2015-11-05 16:32

@Coca-code: 最近看js进阶教程,正对特性,js还能处理linux浏览器,还能侦测系统,浏览器版本,浏览器名称,全部放在了  var client = {};里了。有这方面好书推荐吗,大神。。

支持(0) 反对(0) Coca-code | 园豆:10 (初学一级) | 2015-11-12 11:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册