Metro/Windows 8

윈도우8: 자바 스크립트에서 IE10 클래식과 메트로 버전 구분하는 방법 (꼼수)

길버트리 2012. 10. 4. 20:47

사진출처 왼쪽: http://44counting.blogspot.kr/2011/09/car-news-mini-coupe.html

사진출처 오른쪽: http://www.mjjq.com/blog/archives/964.html

 

글 맨 마지막에 이 '꼼수'의 부작용 내용이 추가되었습니다. 꼭 읽어주세요.

 

앱을 만들다 보면 일부 기능을 웹뷰를 통해 웹사이트의 몇몇 페이지로 연결하곤 합니다.

이때 필요한 것이 지금 웹페이지를 로딩한 IE10이 클래식(Classic, Desktop용)버전인지 메트로(Metro)버전인지 구분하는 방법입니다.

 

User-agent string으로는 두 가지가 구분이 안 됩니다. 그럼 어떻게 해야 할까요?

이 바닥의 진리 중 하나는 "나 혼자만 궁금해 하는 것은 없다."입니다. 지구 반대편에 있는 개발자 누군가도 같은 고민을 하기 마련이지요.

당연히도 stackoverflow.com에 관련 문답이 있어 방법을 정리하였습니다.

출처 : http://stackoverflow.com/questions/8751479/javascript-detect-metro-ui-version-of-ie-10

 

function isActivexEnabled() {
    var supported = null;        
    try {
        supported = !!new ActiveXObject("htmlfile");
    } catch (e) {
        supported = false;
    }

    return supported;
}

if (isActivexEnabled())
{
	alert("IE10 Classic");
}
else
{
	alert("IE10 Metro");
}

 

 

온라인 페이지 http://www.hugeflow.com/temp/DetectingIE.php에 위 소스코드를 수행가능하도록 올려놨으니,

IE10 클래식과 IE10 메트로에서 각각 접속하여 alert창의 결과를 비교해 보십시오.

 

이 꼼수의 핵심은 바로 ActiveX의 지원 유무를 체크하는 것인데요.

이것을 바로 사용하시는 분을 없을 테지만, 노파심에서 덧붙이면,

IE인지 아닌지, IE10인지 아닌지를 이미 검사해서 분기한 후에 추가적으로 확인하는 방식으로 사용하십시오!

 

이 꼼수의 부작용(Side effect)가 있을 것 같아서 불안불안한데 부작용을 발견하신 분은 댓글로 좀 알려주십시오. 굽신 (__);

 

 

내용추가 시작: 2012/10/04 21:04

부작용

한국 마이크로소프트의 김명신 부장님(부작용님이라고 쓸 뻔 했음! ^^;)께서 지적해 주신 부작용입니다.

결국 이 꼼수는 믿고 쓸 수가 없군요.

 

김명신: "첫째로 ARM 기반에서는 Classic/Metro 모두 ActiveX가 동작하지 않으므로 이런식의 구분은 불가능 합니다. 둘째로 Classic에서도 ActiveX 를 사용하지 못하도록 옵션을 변경할 수 있는데 이 경우에도 Classic/Metro를 구분하지 못합니다. 말씀하신 데로 이 방식은 "꼼수"이고 공식적으로 두가지 모드를 구분할 수 있는 방법은 의도적으로 제공하지 않고 있습니다."

내용추가 끝