User-Agent에서 IE 버전 가져 오기
var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}
작동 방식 : 모든 IE 버전 의 사용자 에이전트 문자열 에는 "MSIE 공간 버전 "또는 "Trident other-text rv space-or-colon version "부분이 포함되어 있습니다. 이를 알면 String.match()
정규 표현식 에서 버전 번호를 가져옵니다 . try-catch
블록은 그렇지 않으면 우리는 비 IE 브라우저의 배열 범위를 테스트해야하는 것, 코드를 단축하는 데 사용됩니다.
참고 : 사용자 에이전트가 브라우저를 "호환 모드"로 설정 한 경우 사용자 에이전트가 스푸핑되거나 생략 될 수 있습니다. 실제로 이것은 큰 문제가되지는 않지만.
User-Agent없이 IE 버전 받기
var d = document, w = window;
var ie = ( !!w.MSInputMethodContext ? 11 : !d.all ? 99 : w.atob ? 10 :
d.addEventListener ? 9 : d.querySelector ? 8 : w.XMLHttpRequest ? 7 :
d.compatMode ? 6 : w.attachEvent ? 5 : 1 );
작동 방식 : 각 버전의 IE는 이전 버전 에는 없었던 추가 기능에 대한 지원을 추가합니다 . 따라서 하향식으로 기능을 테스트 할 수 있습니다. 원 하지만 시퀀스는 간결 여기를 사용 if-then
하고 switch
문 마찬가지로 잘 작동합니다. 변수 ie
는 정수 5-11, 이전의 경우 1, 최신 / 비 IE의 경우 99로 설정됩니다. IE 1-11을 정확하게 테스트하려면 0으로 설정할 수 있습니다.
참고 : 와 같은 것에 폴리 필을 추가하는 타사 스크립트가있는 페이지에서 코드를 실행하면 객체 감지가 중단 될 수 있습니다 document.addEventListener
. 그러한 상황에서 user-agent가 최선의 선택입니다.
브라우저가 최신인지 감지
브라우저가 대부분의 HTML 5 및 CSS 3 표준을 지원하는지 여부에 관심이 있다면 IE 8 이하가 주요 문제 앱으로 남아 있다고 합리적으로 생각할 수 있습니다 . 테스트 window.getComputedStyle
하면 최신 브라우저가 상당히 잘 혼합됩니다 (IE 9, FF 4, Chrome 11, Safari 5, Opera 11.5). IE 9는 표준 지원을 크게 향상 시키지만 네이티브 CSS 애니메이션에는 IE 10이 필요합니다.
var isModernBrowser = ( !document.all || ( document.all && document.addEventListener ) );