웹 브라우저 종류 버전 체크
보통 프론트 엔드에서 사용하는 로직으로 javascript에서 웹 브라우저 종류, 버전, OS의 버전등을 체크하여 알맞는 ActiveX 같은 파일을 다운받을 수 있게 하거나, 웹브라우저에 맞는 스크립트 개발을 이용할 때 사용한다.
여기에선 java Servlet에서 체크하는 로직으로 사용한다.
<iframe> 기반으로 url이나 api로 호출할때 사용자의 웹 브라우저를 종류, 버전을 수집하거나 확인하는 목적으로 사용한다.
먼저 테스트 케이스를 작성하였다.
@Test
public void browserSearchTest() {
List<String> list = new ArrayList<>();
String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36";
// 0. Internet Explorer 9
String userAgent0 ="Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0";
list.add(userAgent0);
// 1. Internet Explorer 11
String userAgent1 ="Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko";
list.add(userAgent1);
// 1-1. Internet Explorer 10
String userAgent2 = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)";
list.add(userAgent2);
// 2. Safari
String userAgent3 = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2";
list.add(userAgent3);
// 3. Chrome
String userAgent4 = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36";
list.add(userAgent4);
// 4. Opera
String userAgent5 = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 OPR/17.0.1241.53";
list.add(userAgent5);
// 4-1. Opera 구버전
String userAgent6 = "Opera/9.80 (Windows NT 6.1; WOW64; U; ko) Presto/2.10.229 Version/11.62";
list.add(userAgent6);
// 5. Firefox
String userAgent7 = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0";
list.add(userAgent7);
for(String val : list) {
System.out.println(browserVersionTest(val));
}
}
//웹브라우저 버전체크
private String browserVersionTest(String agentValue) {
String userAgent = agentValue;
String browserVersion = "";
if(userAgent.indexOf("Opera") > -1 || userAgent.indexOf("OPR") > -1) {
browserVersion = "Opera";
}else if (userAgent.indexOf("Firefox") > -1) {
browserVersion = "Firefox";
}else if (userAgent.indexOf("Safari") > -1) {
if( userAgent.indexOf("Chrome") > -1){
browserVersion = "Chrome";
}else {
browserVersion = "Safari";
}
}else if ( userAgent.indexOf("Chrome") > -1) {
browserVersion = "Chrome";
}else if(((userAgent.indexOf("MSIE") > -1) || (userAgent.indexOf("Trident") > -1))) {
String word = "";
if((userAgent.indexOf("MSIE") > -1)) {
word = "MSIE ";
}else if((userAgent.indexOf("Trident") > -1)) {
word = "Trident/.*rv:";
}
Pattern browserPattern = Pattern.compile(word+"([0-9]{1,}[0-9]{0,1})");
Matcher version = browserPattern.matcher(userAgent);
if(version.find()) {
browserVersion = "MSIE" + version.group(1);
}
}
return browserVersion;
}
결과)
참고) 실세 사용시 함수호출시 HttpServletReqeust로 넘겨서 getHeader("User-Agent") 값을 받아서 사용하면된다.
public void browserInfo(HttpServletRequest request) {
String userAgent = request.getHeader("User-Agent");
}