나의질문답

ie9 ,ie10호환성체크 확인방법이 있나요?

예쁜꽃이피었으면 2015. 11. 2. 10:19

http://okky.kr/article/299821


안녕하세요~

ie9,ie10일 때 호환성보기 체크가 되어있는지를 알고 싶습니다.

ie8에서 호환성 체크가 되어 있을 때는 확인이 가능합니다..

<script type="text/javascript">

$(document).ready(function(){
	var ver = getInternetExplorerVersion();
	var agent = navigator.userAgent.toLowerCase();
	
	if (ver > -1){
		if(ver == 7){ // 7 일 때 (ie8에서 호환성모드이면 7로 인식 됨)
		alert("7");
		}
		
		if( agent.indexOf('msie 7') > -1 && agent.indexOf('trident') > -1 ){ //  호환성모드 체크확인
		alert("ie8호환성체크되어있음");
		}
	}	
});

function getInternetExplorerVersion() {
	var rv = -1;
	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;
} 

</script>


ie 버전도 9 인지 10인지는 알 수 있습니다.

agent.indexOf('trident') == 5.0

agent.indexOf('trident') == 6.0

이런식으로 했고요. .


그런데 9,10에서 호환성 체크가 되어 있을 때  ie7인식이 된다는데

왜 위에 소스에서는 인식을 하지 못할까요?


ie9,10에서 호환성보기 체크가 되어있을 때 알아 낼 수 있는 방법 좀 알려주세요~

감사합니다~



http://changpd.blogspot.kr/2013/04/javascript.html 

참조하세요..


trident 값 체크로 버전 확인 가능합니다.

trident/4.0 = 8

trident/5.0 = 9

trident/6.0 = 10

trident/7.0 = 11




나 :

답변감사합니다.

버전 체크는 현재 되는데 ie9에서 호환성체크가 되어있을 때,

ie10에서 호환성체크가 되어있을 때를 확인하고 싶습니다.


agent.indexOf('msie 7') > -1 && agent.indexOf('trident') > -1 이 경우나

agent.indexOf('msie 7') > -1 && navigator.userAgent.match(/Trident\/(\d.\d)/i)[1] == '6.0'

agent.indexOf('msie 7') > -1 && navigator.userAgent.match(/Trident\/(\d.\d)/i)[1] == '5.0'

이런식으로 했을 때 될 것같은데 안되더라고요..



ie11 호환성 체크 해서 테스트 해봤는데 잘되거든요

호환성 체크가 되어 있는지 user agent 찍어 보시는게 좋을것 같습니다




나:

이렇게 했습니다.

<script type="text/javascript">

$(document).ready(function(){
	var ver = getInternetExplorerVersion();
	var agent = navigator.userAgent.toLowerCase();
	var canvas = document.createElement('canvas');
	var bStyle = document.body.style;

		
	if (ver > -1){
		if(ver == 7 && !('getContext' in canvas)){ // 7 일 때 (ie8에서 호환성모드이면 7로 인식 됨)
		alert("ie8 호환성체크됨");
		}

		if( !('getContext' in canvas) && agent.indexOf('msie 9') > -1 && agent.indexOf('trident')  == 51 && !('msTransition' in bStyle) && !('transition' in bStyle )){ //  호환성모드 체크확인
			alert("ie9 호환성모드 체크됨");
		}

		if(agent.indexOf('trident')  == 51 && !canvas.getContext('webgl') && agent.indexOf('msie 7') > -1 && agent.indexOf('trident') > -1 ){ //  호환성모드 체크확인
			alert("ie10 호환성모드 체크됨");
		}
	}	
});

function getInternetExplorerVersion() {
	var rv = -1;
	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;
} 

</script>




음 로직이 잘못되어 있는것 같네요..

var ver = getInternetExplorerVersion();

ver로 리턴될수 있는 값이

호환성보기 체크가 안되어 있을 경우에는

ie7 -> 7, ie8 -> 8, ie9 -> 9, ie10 -> 10, ie11 -> -1

호환성보기 체크

ie7,ie8,ie9,ie10,ie11 -> 7

로 리턴됩니다.

그래서 호환성보기 체크되었을 경우 추가적으로

trident 값을 체크합니다.

4.0 -> 8

5.0 -> 9

6.0 -> 10

7.0 -> 11


그러니까

var ver = getInternetExplorerVersion();

에서 7이 나왔을 경우

trident의 값을 체크해서 이게 8인지, 9인지, 10인지, 11인지 체크를 한번 더 해야 한다는거죠.



나 :

음.. 이렇게 해야 한다는 걸까...

<script type="text/javascript">


$(document).ready(function(){

var ver = getInternetExplorerVersion();

var trident = navigator.userAgent.match(/Trident\/(\d)/i);

alert(ver);

alert(trident);

if (ver == 7){

if(trident == 4){

   alert("ie8호환성체크");

}

if(trident == 5){

   alert("ie9호환성체크");

}

if(trident == 6){

   alert("ie10호환성체크");

}

}


});


function getInternetExplorerVersion() {

var rv = -1;

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;


</script>







반응형