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

最近和浏览器版本杠上了。

简单的来说,就是我想要知道用户使用的浏览器的版本,如果与我们预期的版本不符,则提示用户升级或跟换浏览器

这里的行为就有点像知乎、阿里巴巴等网站的做法,直接上图

https://img1.mukewang.com/5c875dae0001cca808000490.jpg

首先我提的方案是透通过 JavaScript 获取 user agent 字符串中的内容来检测用户使用的浏览器版本

https://img4.mukewang.com/5c875db100013a2b05910053.jpg

如上图,我就可以根据这个字符串中是否存在“FireFox”来判断它是否是 FireFox 浏览器,并根据后面的数字得到版本。

但是 user agent 有个致命的问题,它可以修改,且各个版本的 user agent 内容是不一样的,就算在某个版本区间内可以保证它的一致性,但是不能保证以后的都会一致,况且现在的浏览器更新速度越来越快了。

更何况国内浏览器“鱼龙混杂”,user agent 的判断逻辑可以说很难。(知乎的相关功能已被无数人吐槽)

所以想问大佬们

是否有其他的办法知道浏览器的版本。

不胜感激!


尚方宝剑之说
浏览 626回答 4
4回答

婷婷同学_

只能用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);

jeck猫

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

相关分类

JavaScript