개발

[javascript] 브라우저 체크, 익스플로러 버전체크

지승준 2014. 9. 20. 21:11

브라우저 체크 

useragnet 값 얻어와서 브라우저 문자열 검색.

참고로 indexOf는 파라미터 문자열이 해당 문자열에 포함되어있지않을경우 '-1'을 리턴함.

포함되었을 경우에는 해당 위치(시작점- 0부터표시)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var agt = navigator.userAgent.toLowerCase();
if (agt.indexOf("chrome") != -1return 'Chrome'
if (agt.indexOf("opera") != -1return 'Opera'
if (agt.indexOf("staroffice") != -1return 'Star Office'
if (agt.indexOf("webtv") != -1return 'WebTV'
if (agt.indexOf("beonex") != -1return 'Beonex'
if (agt.indexOf("chimera") != -1return 'Chimera'
if (agt.indexOf("netpositive") != -1return 'NetPositive'
if (agt.indexOf("phoenix") != -1return 'Phoenix'
if (agt.indexOf("firefox") != -1return 'Firefox'
if (agt.indexOf("safari") != -1return 'Safari'
if (agt.indexOf("skipstone") != -1return 'SkipStone'
if (agt.indexOf("msie") != -1return 'Internet Explorer'
if (agt.indexOf("netscape") != -1return 'Netscape'
if (agt.indexOf("mozilla/5.0") != -1return 'Mozilla'
cs


IE 버전체크 

같은 화면인데, ie8에서는 되고, ie9이상 에서는 안되고.. 뭐 이런경우가 생겨버렸다. xp와 win7의 OS 문제일 수도 있을것 같긴 한데, 

테스트를 제대로 해볼 수 가 없는 환경이라 일단 IE 버전체크 하는걸로 해결

보통 익스플로러의 useragnt 값은 이런식으로 나오는데,

1
msie 8.0; windows nt 5.1; trident/4.0;  ......
cs

위의 경우처럼 'msie 8.0' 이라고 버전까지 나와있어서,

저부분만 뽑아내면 된다.


1
2
3
4
5
6
7
8
9
10
function getInternetExplorerVersion() {    
    var rv = -1// Return value assumes failure.    
    if (navigator.appName == 'Microsoft Internet Explorer') {        
        var ua = navigator.userAgent;        
        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");        
        if (re.exec(ua) != null)            
        rv = parseFloat(RegExp.$1);    
    }    
    return rv; 
cs

이러면 rv값에 '8' 이 리턴됨.


그런데 간혹.

IE 8 이상에서도 'msie 7.0' 이라고 나오는 경우가 있다. (호환성보기 사용)

그렇게 되면 'msie 7.0' 만 가지고는 이놈이 7,8,9,10 중에 어떤놈인지 확인이 불가능하다.

그런데 이럴때도 7,8,9,10 같에 차이는 있다. mise 뒤쪽에 trident/4.0; 이 부분으로 식별하면 된다.


8버전 이상의 trident 값은 아래와 같다.

7이하의 버전에서는 trident 값이 없다.


IE 8 = trident/4.0

IE 9 = trident/5.0

IE 10 = trident/6.0 


trident 값 체크 t

1
2
3
4
5
6
var trident = navigator.userAgent.match(/Trident\/(\d)/i);
if(trident != null){
     return 1;
else{
     return 0;
}
cs


IE 테스트 해보고 싶을때는

morder.IE (http://www.modern.ie/ko ) 여기도 좋음


왜 IE에서 에러나는지 친절하게 알려줌.