Internet Explorer, FireFox, Chrome 브라우저에서 확인을 해보았으며,
각 브라우저마다 보여주는 정보가 상이했다.
이를 활용해서 버전 정보를 체크한다.
특히 나에게는 OS의 버전을 찾고자 했다.
이 과정에서 replace 함수 사용에 있어서 특이한 점을 발견했다.
=========================================
우선 브라우저에서 버전 정보를 확인하려면 javascript 에서 제공되는 개체를 이용해야 한다.
navigator.userAgent
라는 개체인데, 이것은 각 브라우저에서 모두 작동이 된다.
다른 개체도 있지만 모든 브라우저 호환을 위해 navigator.userAgent 개체를 이용하도록 한다.
테스트를 위한 기본 소스를 작성해본다.
<script type="text/javascript">
function chkOSIE()
{
var sysInfoTemp = navigator.userAgent;
alert("ie sys info : " + navigator.userAgent);
}
</script>
이를 실행하면 아래의 이미지와 같이 각 브라우저마다 보여주는 정보가 상이함을 체크할 수 있다.
[ Internet Explorer ]
[ FireFox ]
[ Chrome ]
이렇게 필요한 정보를 확인했으니, 그 중에서 OS의 정보를 추출해보도록 한다.
내가 알고자하는 소중한 정보는 모두 괄호() 안에 있음을 확인했다.
따라서 괄호() 안의 내용만 추출하여 OS 버전을 확인해보자.
추가적인 소스는 아래와 같다.
<script type="text/javascript">
function chkOSIE()
{
// 브라우저 정보를 담는다.
var sysInfoTemp = navigator.userAgent;
// 브라우저 정보 중 괄호부분을 찾는다.
var sysInfoFrom = sysInfoTemp.indexOf('(')+1;
var sysInfoEnd = sysInfoTemp.indexOf(')')-1;
// 괄호 부분만을 추출하여 담는다.
var sysInfoSubstring = sysInfoTemp.substr(sysInfoFrom, sysInfoEnd-sysInfoFrom+1).replace(/ /g,'');
// 괄호안의 정보가 ';' 을 구분자로 정보가 담겨있으니 이를 쪼개서 담는다.
var sysInfoSplitArr = sysInfoSubstring.split(';');
var sysInfoOS = "";
var sysInfoText = "";
for(var i=0;i<sysInfoSplitArr.length;i++)
{
// 구분된 각 정보를 대문자로 변환하여 담는다.
sysInfoText = "";
sysInfoText = sysInfoSplitArr[i].toUpperCase();
sysInfoText = sysInfoText.replace(/ /g,'');
// 윈도우 버전 체크를 위해 해당 문자열 찾아서 담는다.
if ( sysInfoText.indexOf('WINDOWS NT') > -1
|| sysInfoText.indexOf('WINDOWSNT') > -1 )
{
sysInfoOS = sysInfoText;
break;
}
}
return;
}
</script>
위와 같이 소스를 구성했다.
navigator.userAgent 개체 자체적으로 속성이 있으면 좋겠는데, 찾아보았지만 딱히 해당되는 속성을 찾지 못해서 부득이 위와 같이 구성을 했다.
이렇게 구성된 것을 각 브라우저마다 값을 체크해본다.
[ Internet Explorer ]
[ FireFox ]
[ Chrome ]
각 브라우저에서는 위와 같은 결과가 나왔다.
모두 보여주는 정보는 약간씩 상이했지만 내가 원하는 OS 버전 정보는 추출해낼 수 있었다.
추가적으로
위의 과정에서 OS 버전 정보를 추출해내고자 해서 공백" " 을 비공백"" 으로 변환하려고 replace 함수를 사용했으나
사용방법에 약간의 차이가 있음을 발견했다.
이에 대한 사용방법은
문자열만 비교해서 변환하는 방법, 정규식을 이용해서 변환하는 방법 이 있었다.
소스를 비교해보자
var sysInfoSubstring = sysInfoTemp.substr(sysInfoFrom, sysInfoEnd-sysInfoFrom+1).replace(/ /g,'');
var sysInfoSubstring2 = sysInfoTemp.substr(sysInfoFrom, sysInfoEnd-sysInfoFrom+1).replace(' ','');
위의 것은 정규식 방법, 아래것은 문자열 단순비교 이다.
아래의 방법으로 했을 때는 공백이 비공백으로 변경되지 않았으나, 위의 방법으로는 변경이 잘 되었다.
이미지로 비교를 해보자.
[ Internet Explorer ]
[ FireFox ]
[ Chrome ]
어떠하신가? 비교가 확실히 되지 않나?
한 가지 추가적으로 더 말하자면 문자열비교 방식에서 신기한 것은...
구분자";" 로 분할을 했을 때 앞에 공백이 들어가는데 그 공백은 변경이 되었으나 중간의 공백은 변경되지 않았다는 것이다.
[출처] 본인
참고사이트 :
replace - http://blog.paran.com/devbada/45656928
navigator.userAgent - http://msdn.microsoft.com/en-us/library/ms534712.aspx, http://blog.naver.com/jingon23?Redirect=Log&logNo=50025447592
endline=========================================