最近把火狐浏览器的版本升级到了4.0.1这个版本,发现之前用到的下面这段代码解决不了获取浏览器和操作系统。
先看原码:
String agent = request.getHeader("user-agent");
StringTokenizer st = new StringTokenizer(agent, ";");
st.nextToken();
String userBrowser = st.nextToken();// 得到用户的浏览器名
String userOS = st.nextToken();// 得到用户的操作系统名
看了下StringTokenizer类作用是字符串分隔解析类型,因此把不同的浏览器得到值进行了一下对比,结果如下:
浏览器名 | 版本号 | 请求头的值 | ||||
IE5 | Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.1; SV1) | |||||
IE6 | 6.0.2900.5512 | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) | ||||
IE7 | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1) | |||||
IE8 | 8.0.6001.18702 | Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1) | ||||
IE9 | 9.0.8112.16421 | Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) | ||||
TT浏览器 | 4.8 | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TencentTraveler 4.0) | ||||
世界之窗 | 3.4.0.5 | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TheWorld) | ||||
火狐 | 4.0.1 | Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 | ||||
谷歌 | 10.0.648.204 | Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16 | ||||
谷歌 | 11.0.696.60 | Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.60 Safari/534.24 | ||||
Safari | 5.0.5 | Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1 | ||||
360极速版 | 4.0.3.416 | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.237 Safari/534.10 | ||||
Opera | 11.01 | Opera/9.80 (Windows NT 5.1; U; Edition IBIS; zh-cn) Presto/2.7.62 Version/11.01 |
发现上面的方法只能针对IE内核的浏览器才有效,谷歌、火狐、safari、opera这类浏览器要如何做去条件判断呢?而且浏览器的不同版这样的请求头也是存在差异的,应该怎么来样来处理这样的问题?求高人指点?先谢谢了。