jQuery로 IE 8을 어떻게 감지합니까?


102

jQuery를 사용하여 브라우저 유형뿐만 아니라 버전도 감지해야합니다. 대부분 IE 8인지 아닌지 알아봐야합니다.

제대로하고 있는지 잘 모르겠습니다.

만약 내가한다면 :

if (jQuery.browser.version >= 8.0) {
dosomething}

버전 8.123.45.6에서 작동하는지 확실하지 않습니까?

편집 : JQuery 2+는 IE8 이하에 대한 지원을 중단 했으므로 더 이상 IE8을 감지하는 데 사용할 수 없습니다. 현재 버전의 JQuery를 사용하는 경우 Non-JQuery 솔루션을 사용해야합니다.


11
아래 제안 된 답변은 jQuery.browser를 사용하는 것이 좋습니다. 그러나 jQuery 문서는 jQuery.browser의 사용을 중단합니다. 대신 jQuery.support를 사용하고 브라우저에 플래그를 지정하는 데 지원되지 않는 기능을 가리킬 것을 제안합니다. 예를 들어 if (jQuery.support.opacity == false) {your IE8 and IE7 code}
IberoMedia

이것은 jquery.support.opacity내가 원하는 것을 한 것입니다. 감사합니다 ...
nrod


일을 제대로하고 있다면 브라우저 버전 감지를 할 필요가 거의 없습니다. 이 기능이 jQuery에서 제거 된 이유가 있으며 그 이유는 브라우저 버전 감지가 좋지 않기 때문입니다. 대신 기능 감지를 사용하면 거의 모든 경우에 문제가 해결됩니다.
Spudley 2013 년

2
IE8은 자바 스크립트 엔진이 너무 느려서이 페이지에서 "스크립트 실행을 중지 하시겠습니까?"라는 대화 상자가 나타나고 기본값은 "예"인 유일한 브라우저이기 때문에 감지해야합니다. 이를위한 기능 감지 메커니즘이 있다면 그것을 사용할 것입니다. 그렇지 않으면 브라우저 == IE8입니다. javascript를 최적화 할 수 없습니다. Kendo 자체 트 리뷰 코드로 인해 발생합니다
PandaWood

답변:


79

그것은에 설명되어 의 jQuery API 문서 . 를 사용하여 Internet Explorer $.browser.msie를 확인한 다음 $.browser.version.

업데이트 : jQuery 1.9에서 $ .browser 제거

jQuery.browser () 메서드는 jQuery 1.3 이후 사용되지 않으며 1.9에서 제거되었습니다. 필요한 경우 jQuery Migrate 플러그인의 일부로 사용할 수 있습니다. Modernizr와 같은 라이브러리와 함께 기능 감지를 사용하는 것이 좋습니다.


내가 할 경우 : if (jQuery.browser.version> = 8.0) {dosomething} 버전 8.123.45.6에서 작동할지 확실하지 않습니까?
salmane 2010

13
문자열이므로 if(jQuery.browser.version.substring(0, 2) == "8.") { ... }. 이렇게하면 모든 버전의 IE8에서 작동합니다.
AndiDog 2010

13
jQuery.browser1.3에서 더 이상 사용되지 않으며 향후 플러그인으로 이동할 수 있습니다. jQuery.browser 문서보기
bendytree 2011 년

, @bendytree 다행히 ITT는 주변에 아직도 및 중단에 대한 언급이 없다
알라

47
jquery.browser는 1.9에서 제거되었습니다
Mandeep Jain

173

가장 좋은 방법은 다음과 같습니다.

HTML5 상용구에서 :

<!--[if lt IE 7]> <html lang="en-us" class="no-js ie6 oldie"> <![endif]-->
<!--[if IE 7]>    <html lang="en-us" class="no-js ie7 oldie"> <![endif]-->
<!--[if IE 8]>    <html lang="en-us" class="no-js ie8 oldie"> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en-us" class="no-js"> <!--<![endif]-->

JS에서 :

if( $("html").hasClass("ie8") ) { /* do your things */ };

특히 $.browserjQuery 1.9 이상에서 제거되었습니다.


11
이것은 IE 버전을 감지하는 매우 영리한 방법입니다. 나는 많이 좋아한다!
Greg

그러나 웹 사이트가 'Content-type : application / xhtml + xml'헤더와 함께 제공되는 경우 작동하지 않습니다. 이러한 조건부 주석은 무시됩니다.
philipp

1
매우 영리하지만 HTML5BP의 조건에 의해 추가 된 현재 클래스를 확인해야한다는 점은 주목할 가치가 있습니다. 지금은 수업이 lt-ie9AOT 라고 생각합니다ie8
byronyasgur 2013 년

2
@meo이 구현도 마음에 듭니다. 그러나 클래스가 <html>대신 첨부되는 이유 가 <body>있습니까?
휴식

@meo 흥미 롭군요. 감사.
휴식


56

HTML을 사용하여 IE8을 감지 할 수도 있습니다.

<!--[if IE 8]>
<script type="text/javascript">
    ie = 8;
</script>
<![endif]-->

모든 스크립트를 작성하기 전에 "ie"변수 등을 확인할 수 있습니다.


4
이 구문은 "보다 작음"( "[if lt IE 7]") 및 "보다 큼"( "[if gt IE 8]") 비교자를 지원합니다.
spiffytech

1
<!-[if lte IE 8]> ie8 포함
user227353

1
이것이 가장 좋은 방법입니다. "IE8을 사용하는 이유는 무엇입니까?"라는 다른 페이지로 리디렉션하기 만하면됩니다. 지금 업그레이드하세요!
Leon Gaban 2014

2
오늘의 기준에 따르면 IE를 사용하는 이유를 물어볼 것입니다.
TheBuzzSaw

JQuery 2.1.1이 IE8에서 작동하지 않으므로 IE8을 감지하는 데 사용할 수 없기 때문에 이것은 이제 최상의 솔루션으로 보입니다!
Dave

27

document.documentMode 는 브라우저가 IE8이 아닌 경우 정의되지 않습니다.

표준 모드의 경우 8을 반환하고 'IE7과 호환 가능'의 경우 7을 반환합니다.

IE7로 실행되는 경우 지원되지 않는 CSS 및 DOM 기능이 많이 있습니다.


9
IE9는 9를 반환합니다.하지만 $ .browser는 더 이상 좋은 솔루션이 아니므로이 답변은 더 높은 투표를 받아야합니다. 시도 :if ((document.documentMode || 100) < 9) { // IE8
Don McCurdy

경우 (document.documentMode == 정의되지 않은 && document.documentMode == 8!) {...}
jpprade

IE8이 여전히 많이 사용되고있는 일부 응용 프로그램 (즉, 미국 학교)의 경우 @Don McCurdy의 접근 방식은 간단하고 효과적입니다. Modernizr과 함께 잘 작동합니다.
cbmtrx

좋은 대답입니다! 그러면 IE8에서 IE11까지의 버전 번호가 반환됩니다 (조건부 주석의 경우 IE5에서 IE9까지와 비교-누군가가 여전히 정품 IE7 또는 IE6도 감지해야하는 경우 조건부 주석을 사용해야합니다). 참고 워드 프로세서에 따라 그것을 반환 할 수 있습니다 0페이지가 로딩되는 동안 - "나중에 문서 호환성 모드를 결정하려고"(즉, 후 문서 준비).
user56reinstatemonica8 2016 년

15

가정 ...

  • ... 탐지에 관심이있는 구 버전 IE 의 크 런키 한 렌더링 엔진 으로, 구 IE에서 스타일을 제대로 보이게하기 위해 (그렇지 않으면 기능 탐지 사용)
  • ... HTML에 조건부 주석을 추가수 없다는 것 -예를 들어 모든 페이지에 적용 할 수있는 JS 플러그인의 경우 (그렇지 않으면 <body>또는 에서 조건부 클래스의 트릭을 수행하십시오 <html>)

... 이것이 아마도 최선의 트릭 일 것입니다 ( 이 비 jQuery를 기반으로 , 약간 덜 유연한 변형 ). 그런 다음 테스트를 생성하고 적절한 조건부 주석을 제거합니다.

(IE10 + '표준 모드'에서는 조건부 주석이 무시되지만 IE10 + '표준 모드'에는 미친 렌더링 엔진이 없기 때문에 괜찮습니다!)

이 기능에 드롭 :

function isIE( version, comparison ){
    var $div = $('<div style="display:none;"/>');

    // Don't chain these, in IE8 chaining stops some versions of jQuery writing the conditional comment properly
    $div.appendTo($('body'));
    $div.html('<!--[if '+(comparison||'')+' IE '+(version||'')+']><a>&nbsp;</a><![endif]-->');

    var ieTest = $div.find('a').length;
    $div.remove();
    return ieTest;
}

그런 다음 다음과 같이 사용하십시오.

if(isIE()){ /* runs in all versions of IE after 4 before standards-mode 10 */ }

if(isIE(8)){ /* runs in IE8 */ }

if(isIE(9)){ /* runs in IE9 */ }

if(isIE(8,'lte')){ /* runs in IE8 or below */ }

if(isIE(6,'lte')){ /* if you need this, I pity you... */ }

또한이 함수의 결과를 캐싱하여 반복 할 필요가 없도록 제안합니다. 예를 들어, 문자열 (comparison||'')+' IE '+(version||'')을 키로 사용 하여이 테스트의 결과를 어딘가에있는 객체에 저장하고 확인할 수 있습니다.


9

노트 :

1) $ .browser는 jQuery 1.9+에서 삭제 된 것으로 보입니다 (Mandeep Jain이 언급 한대로). 됩니다 권장 사용 .support 대신.

2) $ .browser.version 은 브라우저가 "호환성"모드 일 때 IE> 7에서 "7"을 반환 할 수 있습니다.

3) IE 10부터 조건부 주석 이 더 이상 작동하지 않습니다.

4) jQuery 2.0+는 IE 6/7/8에 대한 지원을 중단합니다.

5) document.documentMode 는 Internet Explorer 8 이상 브라우저 에서만 정의 된 것으로 보입니다 . 반환 된 값은 Internet Explorer가 실행중인 "호환성"모드를 알려줍니다. 그래도 좋은 해결책은 아닙니다.

많은 .support () 옵션을 시도했지만 IE 브라우저 (9+)가 호환 모드에있을 때 단순히 IE 7처럼 작동하는 것처럼 보입니다 ... :(

지금까지 나는 이것이 작동하는 것을 발견했습니다 (종류 -a).

(documentMode가 정의되어 있지 않고 htmlSerialize 및 opacity가 지원되지 않는 경우 IE <8 ...)

if(!document.documentMode && !$.support.htmlSerialize && !$.support.opacity) 
{
    // IE 6/7 code
}

5

브라우저 버전을 조작하면 자주 좋지 않습니다. 혼자서 구현하고 싶지는 않습니다. 그러나 Paul Irish와 다른 똑똑한 사람들이 만든 Modernizr 를 사용할 수 있습니다 . 브라우저가 실제로 수행 할 수있는 작업 을 감지하고 <html>요소 에 적절한 클래스를 넣습니다 . 그러나 Modernizr 을 사용하면 다음과 같이 IE 버전을 테스트 할 수 있습니다.

$('html.lt-ie9').each() {
    // this will execute if browser is IE 8 or less
}

유사하게, .lt-ie8.lt-ie7.


3

또한 jQuery.support를 살펴 봐야 합니다. 기능을 코딩하는 데있어 기능 감지는 브라우저 감지보다 훨씬 더 안정적입니다 (브라우저 버전을 기록하려고하지 않는 한).


3
IE8을 감지하기 위해 jQuery.support를 어떻게 사용합니까?
BishopZ

AJAX는 브라우저가 AJAX 지원하는 경우 다음 true를 돌려 jQuery.support.ajax을 사용할 수 있습니다 찾고있는 경우
조나단 린

이 답변이 도움이 될 것입니다 stackoverflow.com/questions/1944169/...
helgatheviking

3

이 jquery를 사용하여 브라우저의 유형과 버전을 쉽게 감지 할 수 있습니다.

$(document).ready(function()
{
 if ( $.browser.msie ){
    if($.browser.version == '6.0')
    {   $('html').addClass('ie6');
    }
    else if($.browser.version == '7.0')
    {   $('html').addClass('ie7');
    }
    else if($.browser.version == '8.0')
    {   $('html').addClass('ie8');
    }
    else if($.browser.version == '9.0')
    {   $('html').addClass('ie9');
    }
 }
 else if ( $.browser.webkit )
 { $('html').addClass('webkit');
 }
 else if ( $.browser.mozilla )
 { $('html').addClass('mozilla');
 }
 else if ( $.browser.opera )
 { $('html').addClass('opera');
 }
});

1

다음 은 브라우저 / OS 감지를 식별하는 Jquery 브라우저 감지 플러그인입니다.

플러그인을 포함한 후 스타일링 목적으로 사용할 수 있습니다.

$("html").addClass($.os.name);
$("body").addClass($.browser.className);
$("body").addClass($.browser.name);

0

$ .browser를 사용하여 브라우저 이름을 감지 할 수 있습니다. 가능한 값은 다음과 같습니다.

  • 웹킷 (jQuery 1.4 기준)
  • 사파리 (사용되지 않음)
  • 오페라
  • msie
  • 모질라

또는 부울 플래그를 가져옵니다. $ .browser.msie는 브라우저가 MSIE이면 참이됩니다.

버전 번호는 주요 릴리스 번호에만 관심이있는 경우 parseInt ($. browser.version, 10)을 사용할 수 있습니다. $ .browser.version 문자열을 직접 구문 분석 할 필요가 없습니다.

어쨌든 $ .support 속성은 $ .browser에 의존하지 않고 특정 기능에 대한 지원을 감지하는 데 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.