为了账号安全,请及时绑定邮箱和手机立即绑定

是否有可能,不透过 user agent,知道用户使用的浏览器信息

是否有可能,不透过 user agent,知道用户使用的浏览器信息

尚方宝剑之说 2019-03-06 18:09:31
最近和浏览器版本杠上了。简单的来说,就是我想要知道用户使用的浏览器的版本,如果与我们预期的版本不符,则提示用户升级或跟换浏览器这里的行为就有点像知乎、阿里巴巴等网站的做法,直接上图首先我提的方案是透通过 JavaScript 获取 user agent 字符串中的内容来检测用户使用的浏览器版本如上图,我就可以根据这个字符串中是否存在“FireFox”来判断它是否是 FireFox 浏览器,并根据后面的数字得到版本。但是 user agent 有个致命的问题,它可以修改,且各个版本的 user agent 内容是不一样的,就算在某个版本区间内可以保证它的一致性,但是不能保证以后的都会一致,况且现在的浏览器更新速度越来越快了。更何况国内浏览器“鱼龙混杂”,user agent 的判断逻辑可以说很难。(知乎的相关功能已被无数人吐槽)所以想问大佬们是否有其他的办法知道浏览器的版本。不胜感激!
查看完整描述

4 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

只能用UA,同时浏览器的版本信息允许被修改,可欺骗性比较强。


这是我常用的获取浏览器信息的代码,你可以参考一下:


navigator.sayswho= (function(){


var ua= navigator.userAgent, tem, 

M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];

if(/trident/i.test(M[1])){

    tem=  /\brv[ :]+(\d+)/g.exec(ua) || [];

    return 'IE '+(tem[1] || '');

}

if(M[1]=== 'Chrome'){

    tem= ua.match(/\b(OPR|Edge)\/(\d+)/);

    if(tem!= null) return tem.slice(1).join(' ').replace('OPR', 'Opera');

}

M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];

if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);

return M.join(' ');

})();


console.log(navigator.sayswho);


查看完整回答
反对 回复 2019-03-12
?
jeck猫

TA贡献1909条经验 获得超7个赞

根据UA来判断浏览器,只能接受UA会被修改的情况,这是没有办法改变的。
不过,某些情况下可以确定浏览器版本区间,比如IE5和IE6是没有XMLHttpRequest对象的,检测用户浏览器是否版本大于IE6可以使用if(window.XMLHttpRequest)语句进行判断。
我想,就算能修改IE的UA,也没办法凭空造一个不存在的XMLHttpRequest对象来吧。

查看完整回答
反对 回复 2019-03-12
  • 4 回答
  • 0 关注
  • 625 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信