jQuery를 사용하여 브라우저 유형뿐만 아니라 버전도 감지해야합니다. 대부분 IE 8인지 아닌지 알아봐야합니다.
제대로하고 있는지 잘 모르겠습니다.
만약 내가한다면 :
if (jQuery.browser.version >= 8.0) {
dosomething}
버전 8.123.45.6에서 작동하는지 확실하지 않습니까?
편집 : JQuery 2+는 IE8 이하에 대한 지원을 중단 했으므로 더 이상 IE8을 감지하는 데 사용할 수 없습니다. 현재 버전의 JQuery를 사용하는 경우 Non-JQuery 솔루션을 사용해야합니다.
답변
그것은에 설명되어 의 jQuery API 문서 . 를 사용하여 Internet Explorer $.browser.msie
를 확인한 다음 $.browser.version
.
업데이트 : jQuery 1.9에서 $ .browser 제거
jQuery.browser () 메서드는 jQuery 1.3 이후 사용되지 않으며 1.9에서 제거되었습니다. 필요한 경우 jQuery Migrate 플러그인의 일부로 사용할 수 있습니다. Modernizr와 같은 라이브러리와 함께 기능 감지를 사용하는 것이 좋습니다.
답변
가장 좋은 방법은 다음과 같습니다.
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 */ };
특히 $.browser
jQuery 1.9 이상에서 제거되었습니다.
답변
이것은 모든 IE8 마이너 버전에서 작동합니다.
if ($.browser.msie && parseInt($.browser.version, 10) === 8) {
alert('IE8');
} else {
alert('Non IE8');
}
-업데이트
있습니다 $ .browser이 됩니다 jQuery를 1.9에서 제거
답변
HTML을 사용하여 IE8을 감지 할 수도 있습니다.
<!--[if IE 8]>
<script type="text/javascript">
ie = 8;
</script>
<![endif]-->
모든 스크립트를 작성하기 전에 “ie”변수 등을 확인할 수 있습니다.
답변
document.documentMode 는 브라우저가 IE8이 아닌 경우 정의되지 않습니다.
표준 모드의 경우 8을 반환하고 ‘IE7과 호환 가능’의 경우 7을 반환합니다.
IE7로 실행되는 경우 지원되지 않는 CSS 및 DOM 기능이 많이 있습니다.
답변
가정 …
- … 탐지에 관심이있는 구 버전 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> </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||'')
을 키로 사용 하여이 테스트의 결과를 어딘가에있는 객체에 저장하고 확인할 수 있습니다.
답변
노트 :
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
}
