JavaScript에서 IE 버전 (v9 이전) 감지


246

Internet Explorerv9 이전 버전을 사용하는 경우 웹 사이트 사용자를 오류 페이지로 반송하고 싶습니다 . 지원하는 데 시간과 돈이 가치가 없습니다 IE pre-v9. 다른 모든 비 IE 브라우저의 사용자는 문제가 없으며 반송해서는 안됩니다. 제안 된 코드는 다음과 같습니다.

if(navigator.appName.indexOf("Internet Explorer")!=-1){     //yeah, he's using IE
    var badBrowser=(
        navigator.appVersion.indexOf("MSIE 9")==-1 &&   //v9 is ok
        navigator.appVersion.indexOf("MSIE 1")==-1  //v10, 11, 12, etc. is fine too
    );

    if(badBrowser){
        // navigate to error page
    }
}

이 코드가 트릭을 수행합니까?

아마 내 방식으로 올 몇 가지 의견을 제시하기 위해 :

  1. 예, 사용자가 위조 할 수 있음을 알고 있습니다 useragent 문자열을 . 걱정하지 않습니다.
  2. 예, 프로그래밍 전문가가 브라우저 유형 대신 기능 지원을 스니핑하는 것을 선호하지만이 경우이 접근법이 의미가 있다고 생각하지 않습니다. 모든 (관련) 비 IE 브라우저가 필요한 기능을 지원한다는 것을 이미 알고 있습니다.pre-v9 IE 브라우저가 지원하지 않는 있습니다. 사이트 전체에서 기능별로 기능을 확인하는 것은 낭비입니다.
  3. 예, 누군가가 IE v1 (또는> = 20)을 은 'badBrowser'가 true로 설정되지 않고 경고 페이지가 제대로 표시되지 않습니다. 그것은 우리가 기꺼이 감수 할 위험입니다.
  4. 예, Microsoft에는 정확한 브라우저 버전 감지에 사용할 수있는 "조건부 주석"이 있다는 것을 알고 있습니다. IE는 더 이상 조건부 주석을 지원하지 IE 10않으므로이 방법은 전혀 쓸모가 없습니다.

알아야 할 다른 명백한 문제가 있습니까?


122
"IE v9 이전 버전을 지원하는 것은 시간과 돈이 가치가 없습니다." 내가 할 수 있으면 좋겠다.
Hassan

2
점을 기준으로 [2] 나는 모더 나이저 (제안하지 않습니다 en.wikipedia.org/wiki/Modernizr을 모두가 모래 어딘가에서 선을 그릴 수있다 - -)하지만 IE9는 높은 라인처럼 보인다
amelvin

1
조건부 주석은 일반적인 주석입니다. 오직 IE만이 그것들을 특별한 것으로 해석합니다. IE10 +는 더 이상 그렇게하지 않습니다.
Andreas

3
조건부 주석은 IE 10에서 비 IE 브라우저와 동일하게 취급됩니다. 그것들은 유효한 HTML 주석이므로 그렇게 취급됩니다. 나는 Andreas에 동의하고 조건부 의견이 갈 길이라고 생각합니다.
Tim Down

1
IE10 +에 대한 공식 문서는 조건부 주석을 지원하지 않습니다 : blogs.msdn.com/b/ie/archive/2011/07/06/…- 덕분에 : stackoverflow.com/a/9900331/320399
blong

답변:


354

이것이 내가 선호하는 방법입니다. 최대 제어 기능을 제공합니다. (참고 : 조건문은 IE5-9에서만 지원됩니다.)

먼저 수업을 올바르게 설정하십시오.

<!DOCTYPE html>
<!--[if lt IE 7]> <html class="lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>    <html class="lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>    <html class="lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html> <!--<![endif]-->    
<head>

그런 다음 CSS를 사용하여 스타일 예외를 만들거나 필요한 경우 간단한 JavaScript를 추가 할 수 있습니다.

(function ($) {
    "use strict";

    // Detecting IE
    var oldIE;
    if ($('html').is('.lt-ie7, .lt-ie8, .lt-ie9')) {
        oldIE = true;
    }

    if (oldIE) {
        // Here's your JS for IE..
    } else {
        // ..And here's the full-fat code for everyone else
    }

}(jQuery));

Paul Irish 에게 감사합니다 .


21
영업 이익은 순수 자바 스크립트 솔루션을 요구 감안할 때, 나는 그것이 기존의 HTML을 변경 포함하지 않는 @ 팀 아래로 대답 아래, 더 나은 것을 믿습니다 플러스는 jQuery를 사용하지 않는 것 : stackoverflow.com/a/10965203/134120를
AsGoodAsIt가

w3 html 유효성 검사기 에서이 오류가 발생합니다.Error: Saw <!-- within a comment. Probable cause: Nested comment (not allowed). At line 5, column 21 if gt IE 8]><!--><html
abumalick

161

IE 버전 반환 또는 IE가 아닌 경우 false 반환

function isIE () {
  var myNav = navigator.userAgent.toLowerCase();
  return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
}

예:

if (isIE () == 8) {
 // IE8 code
} else {
 // Other versions IE or not IE
}

또는

if (isIE () && isIE () < 9) {
 // is IE version less than 9
} else {
 // is IE 9 and later or not IE
}

또는

if (isIE()) {
 // is IE
} else {
 // Other browser
}

36
IE11에서는 작동하지 않습니다. IE 11부터 UA 문자열을 다음과 같이 변경했습니다."mozilla/5.0 (windows nt 6.3; wow64; trident/7.0; .net4.0e; .net4.0c; media center pc 6.0; .net clr 3.5.30729; .net clr 2.0.50727; .net clr 3.0.30729; rv:11.0) like gecko"
Annie

22
FF에서 "false <9"는 "true"입니다. 따라서 상태는 다음과 같아야합니다if (isIE () && isIE () < 9) {
nZeus

3
@DeadlyChambers 아마도 IE7 표준 모드에서 실행 중입니까? msdn.microsoft.com/ko-kr/library/ie/cc196988(v=vs.85).aspx
mason81

4
승인 된 답변은 HTML에서 IE 버전을 감지하는 방법입니다. 이것은 원래 질문에 대한 답변입니다.
Matt Wagner

2
@PrasadGayan-Microsoft Edge는 Internet Explorer가 아닙니다. 따라서 거짓을 반환하는 것이 올바른 것으로 보입니다.
BryanGrezeszak

120

다른 누구도 addEventLister-method 를 추가하지 않고 올바른 브라우저 모드를 사용하는 경우 IE 8 이하를 확인할 수 있습니다.

if (window.attachEvent && !window.addEventListener) {
    // "bad" IE
}

레거시 Internet Explorer 및 attachEvent (MDN)


7
이것은 JavaScript에서 IE <= 8을 완전히 감지하는 가장 효율적인 방법 인 것 같습니다.이 방법을 찾고있는 저 같은 사람들에게 좋습니다.
Gregory Magarshak

큰! 이것은 또한 내가 찾던 Quirks Mode에서 IE9를 감지합니다.
sstur

7
이 솔루션은 "사용하기 쉬운"솔루션이지만 몇 가지 위험이 있습니다. 회사의 모든 사용자 (솔루션을 인식하지 못함)는 "addEventListener"또는 "attachEvent"를 구현하여 IE 8에서의 부족을 처리 할 수 ​​있습니다. 그러면 코드가 작동을 멈 춥니 다.
Zé Carlos

@RoyiNamir IE8을 테스트합니다. IE11에서 왜 지구상에서 true를 반환해야합니까?
안드레아스

@ 안드레아스 죄송합니다. OP가 ie9 이전에 원하는 것을 보지 못했습니다. 삭제.
Royi Namir

114

조건부 주석을 사용하십시오. IE <9의 사용자를 감지하려고하면 해당 브라우저에서 조건부 주석이 작동합니다. 다른 브라우저 (IE> = 10 및 비 IE)에서는 주석이 일반적인 HTML 주석으로 처리됩니다.

HTML 예 :

<!--[if lt IE 9]>
WE DON'T LIKE YOUR BROWSER
<![endif]-->

필요한 경우 스크립트를 사용하여이 작업을 수행 할 수도 있습니다.

var div = document.createElement("div");
div.innerHTML = "<!--[if lt IE 9]><i></i><![endif]-->";
var isIeLessThan9 = (div.getElementsByTagName("i").length == 1);
if (isIeLessThan9) {
    alert("WE DON'T LIKE YOUR BROWSER");
}

5
@Tim Down의 JavaScript 버전은 저에게 큰 도움이되었습니다. BrowserStack을 사용하여 Windows 7 및 IE 8, 9, 10 및 11에서 테스트했습니다. Safari 5.1, Firefox 28.0, Chrome 33.0 및 Opera 20.0이 설치된 Mac OS X Snow Leopard; 아이폰 5 모바일 사파리; 안드로이드 삼성 갤럭시 탭 2 10.1 4.0. 예상대로 IE8만이 IeLessThan9라고보고했습니다. 좋은!
Steve Saporta

58

MSIE (v6-v7-v8-v9-v10-v11)를 쉽게 감지하려면 :

if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
   // MSIE
}

조건부 주석을 지원하지 않으므로 IE10을 감지하는 데 유용합니다. IE11에서는 작동하지 않지만 IE11은 일반적으로 문제가 없습니다.
personne3000

11
마지막으로 기능 감지 사용에 대해 강의하지 않고 실제로 질문에 답변하는 답변입니다.
cdmckay

32

AngularJS IE를 확인 하는 방법은 다음과 같습니다.

/**
 * documentMode is an IE-only property
 * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
 */
var msie = document.documentMode;

if (msie < 9) {
    // code for IE < 9
}

와우 이것은 모든 조건부 주석보다 훨씬 간단합니다! 이것에 대한 제한이 없습니까?
andrewb

문서에 따르면 IE8 +는이 속성을 지원하므로 대부분의 경우 충분하다고 생각합니다.
iurii

MSDN 참조에 따르면 "현재 문서가 아직 결정되지 않은 경우 documentMode는 값 0을 반환합니다. 일반적으로 문서를로드 할 때 발생합니다." 이는 <head>에로드 된 스크립트 내에서 올바른 응답을 얻지 못할 수 있음을 의미합니까?
Erik Knowles

문서가 이미로드되었을 때 window.onload의 값을 확인하여 문제를 해결할 수 있다고 생각합니다.
iurii


19

기능 감지를 사용하여 IE 버전 감지 (IE6 +, IE6 이전의 브라우저는 6으로 감지되며 비 IE 브라우저의 경우 널을 리턴 함) :

var ie = (function (){
    if (window.ActiveXObject === undefined) return null; //Not IE
    if (!window.XMLHttpRequest) return 6;
    if (!document.querySelector) return 7;
    if (!document.addEventListener) return 8;
    if (!window.atob) return 9;
    if (!document.__proto__) return 10;
    return 11;
})();

편집 : 나는 사용자의 편의를 위해 이물 / 고궁 박물원의 REPO을 만들었습니다 즉 버전

최신 정보:

한 줄에 다음과 같이보다 컴팩트 한 버전을 작성할 수 있습니다.

return window.ActiveXObject === undefined ? null : !window.XMLHttpRequest ? 6 : !document.querySelector ? 7 : !document.addEventListener ? 8 : !window.atob ? 9 : !document.__proto__ ? 10 : 11;

16

이 함수는 IE 주 버전 번호를 정수로 반환하거나 undefined브라우저가 Internet Explorer가 아닌 경우 반환합니다. 이는 모든 사용자 에이전트 솔루션과 마찬가지로 사용자 에이전트 스푸핑 (버전 8 이후 IE의 공식 기능)에 취약합니다.

function getIEVersion() {
    var match = navigator.userAgent.match(/(?:MSIE |Trident\/.*; rv:)(\d+)/);
    return match ? parseInt(match[1]) : undefined;
}

오웬, 실제로 어떻게 사용합니까? 반환 값을 어떻게 검색합니까? 나는 console.log(!!match && parseInt(match[1])), console.log(parseInt(match[1]))그리고 시도 console.log(match)했지만 그 결과는 없었다.
Frank Conijn

함수 자체를 호출하여 반환 값을 가져옵니다 getIEVersion(). 예를 들면 :if (getIEVersion() < 9) {/* IE 8 or below */} if (!getIEVersion()) {/* Not IE */}
오웬

15

조건부 주석을 사용하여 JS에서 IE 감지

// ----------------------------------------------------------
// A short snippet for detecting versions of IE in JavaScript
// without resorting to user-agent sniffing
// ----------------------------------------------------------
// If you're not in IE (or IE version is less than 5) then:
//     ie === undefined
// If you're in IE (>=5) then you can determine which version:
//     ie === 7; // IE7
// Thus, to detect IE:
//     if (ie) {}
// And to detect the version:
//     ie === 6 // IE6
//     ie > 7 // IE8, IE9 ...
//     ie < 9 // Anything less than IE9
// ----------------------------------------------------------

// UPDATE: Now using Live NodeList idea from @jdalton

var ie = (function(){

    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');

    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
        all[0]
    );

    return v > 4 ? v : undef;

}());

그것은 내 대답과 거의 같습니다.
Tim Down

@TimDown : 아마도이 답변은 기능이 약간 완성되어 버전 번호를 알려줍니다. 또한이 답변의 시작 부분에있는 링크는이 기술에 대한 몇 가지 유익한 의견과 흥미로운 변형이있는 요점으로 연결됩니다.
Alan

@ 앨런 : 페어 포인트. 나는 그 질문에 내 것을 맞추었지만 출처를 인용하지 않았다.
Tim Down

12

이것은 나를 위해 작동합니다. <IE9가 마음에 들지 않는 이유를 설명하고 선호하는 브라우저에 대한 링크를 제공하는 페이지로의 리디렉션으로 사용합니다.

<!--[if lt IE 9]>
<meta http-equiv="refresh" content="0;URL=http://google.com">
<![endif]-->

1
아, 그건 더러운 일입니다. 더 친근한 방법을 사용하고 IE 경고 모양으로 div를 표시하고 방문자가 그것을 클릭하면 사용자가 browsehappy.com으로
Codebeat

10

코드는 검사를 수행 할 수 있지만 생각한 것처럼 누군가가 IE v1 또는> v19를 사용하여 페이지에 액세스하려고하면 오류가 발생하지 않으므로 아래 코드와 같이 Regex 표현식으로 검사하는 것이 더 안전 할 수 있습니다.

var userAgent = navigator.userAgent.toLowerCase();
// Test if the browser is IE and check the version number is lower than 9
if (/msie/.test(userAgent) && 
    parseFloat((userAgent.match(/.*(?:rv|ie)[\/: ](.+?)([ \);]|$)/) || [])[1]) < 9) {
  // Navigate to error page
}

이것은 좋은 대답이 아닙니다. UA 스니핑은 신뢰할 수 없습니다. 더 여기에에 : modernizr.com/docs
Jezen 토마스

3
@Jezen 때때로 UA- 스니핑이가는 길입니다 : github.com/Modernizr/Modernizr/issues/538
István Ujj-Mészáros

8

조건부 주석은 Microsoft 참조 페이지 에 명시된 바와 같이 IE에서 버전 10부터 더 이상 지원되지 않습니다 .

var ieDetector = function() {
  var browser = { // browser object

      verIE: null,
      docModeIE: null,
      verIEtrue: null,
      verIE_ua: null

    },
    tmp;

  tmp = document.documentMode;
  try {
    document.documentMode = "";
  } catch (e) {};

  browser.isIE = typeof document.documentMode == "number" || eval("/*@cc_on!@*/!1");
  try {
    document.documentMode = tmp;
  } catch (e) {};

  // We only let IE run this code.
  if (browser.isIE) {
    browser.verIE_ua =
      (/^(?:.*?[^a-zA-Z])??(?:MSIE|rv\s*\:)\s*(\d+\.?\d*)/i).test(navigator.userAgent || "") ?
      parseFloat(RegExp.$1, 10) : null;

    var e, verTrueFloat, x,
      obj = document.createElement("div"),

      CLASSID = [
        "{45EA75A0-A269-11D1-B5BF-0000F8051515}", // Internet Explorer Help
        "{3AF36230-A269-11D1-B5BF-0000F8051515}", // Offline Browsing Pack
        "{89820200-ECBD-11CF-8B85-00AA005B4383}"
      ];

    try {
      obj.style.behavior = "url(#default#clientcaps)"
    } catch (e) {};

    for (x = 0; x < CLASSID.length; x++) {
      try {
        browser.verIEtrue = obj.getComponentVersion(CLASSID[x], "componentid").replace(/,/g, ".");
      } catch (e) {};

      if (browser.verIEtrue) break;

    };
    verTrueFloat = parseFloat(browser.verIEtrue || "0", 10);
    browser.docModeIE = document.documentMode ||
      ((/back/i).test(document.compatMode || "") ? 5 : verTrueFloat) ||
      browser.verIE_ua;
    browser.verIE = verTrueFloat || browser.docModeIE;
  };

  return {
    isIE: browser.isIE,
    Version: browser.verIE
  };

}();

document.write('isIE: ' + ieDetector.isIE + "<br />");
document.write('IE Version Number: ' + ieDetector.Version);

그런 다음 사용하십시오 :

if((ieDetector.isIE) && (ieDetector.Version <= 9))
{

}

1
이것은 전체 그물, 적어도 내가 시도한 것들의 humongus에서 일한 유일한 것입니다 ... thx;)
Henrique C.

이 코드는 좋지만 호환성보기 모드를 감지 할 수 없습니다. IE 11에서 호환성보기를 사용하여 IE 11을 사용하고 있으며이 코드는 여전히 version 11EDIT를 제공합니다.이 코드는 놀랍습니다! 하하, 그것은 모든 것을 가진 물건을 제공합니다. 버전은 11이지만 docModeIR은 9와 같습니다. 감사합니다!
MarceloBarbosa

5

즉 10과 11의 경우

js를 사용하고 html로 클래스를 추가하여 조건부 주석 의 표준을 유지할 수 있습니다 .

  var ua = navigator.userAgent,
      doc = document.documentElement;

  if ((ua.match(/MSIE 10.0/i))) {
    doc.className = doc.className + " ie10";

  } else if((ua.match(/rv:11.0/i))){
    doc.className = doc.className + " ie11";
  }

또는 bowser와 같은 lib를 사용하십시오.

https://github.com/ded/bowser

또는 기능 감지를위한 modernizr :

http://modernizr.com/


2
몇 가지 스크립트와 솔루션을 시도했지만 아무것도 작동하지 않았습니다. 그런 다음 프로젝트에 bowser를 포함 시켰으며 방금 작동했습니다. bowser를 제안하기위한 하나입니다.
Moulde

3

Internet Explorer 10 | 11을 감지하려면 body 태그 바로 뒤에이 작은 스크립트를 사용할 수 있습니다.

제 경우에는 헤드에로드 된 jQuery 라이브러리를 사용합니다.

<!DOCTYPE HTML>
<html>
<head>
    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
</head>
<body>
    <script>if (navigator.appVersion.indexOf('Trident/') != -1) $("body").addClass("ie10");</script>
</body>
</html>

이 덕분에 이전 버전을 지원하지
않기

IE9도 트라이던트이지만 CSS 지원과 동일하지 않습니다. 당신의 탐지는 10 이상이라고 생각하지만 정확하지 않습니다.
코드 비트

3

이것은 죽음에 대한 답변이지만, 이것 만 있으면됩니다.

!!navigator.userAgent.match(/msie\s[5-8]/i)

또한 가장 일반적인 IE 사용자 에이전트 문자열에 대한 정규식 패턴을 보여주는 샌드 박스가 있습니다. regex101.com/r/lC6oP3/1
Timothy Perez

@alessadro-하지만 그렇지 않나요? OP는 <9 ... 테스트를 원했습니다.
nnnnnn

2
var Browser = new function () {
    var self = this;
    var nav = navigator.userAgent.toLowerCase();
    if (nav.indexOf('msie') != -1) {
        self.ie = {
            version: toFloat(nav.split('msie')[1])
        };
    };
};


if(Browser.ie && Browser.ie.version > 9)
{
    // do something
}

2

Microsoft 에 따르면 다음이 가장 좋은 솔루션이며 매우 간단합니다.

function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
    var rv = -1; // Return value assumes failure.
    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;
}

function checkVersion()
{
    var msg = "You're not using Internet Explorer.";
    var ver = getInternetExplorerVersion();

    if ( ver > -1 )
    {
        if ( ver >= 8.0 ) 
            msg = "You're using a recent copy of Internet Explorer."
        else
            msg = "You should upgrade your copy of Internet Explorer.";
      }
    alert( msg );
}

실제로, 누군가 다른 사람이 위의 코드를 사용하려고 시도하는 경우 나중에 답변의 코드가 IE11 ( stackoverflow.com/a/26375930/1129926 )에서 작동합니다 . 그러나 IE12 등에서도 작동합니까? 결론은 이것을 임시 해킹으로 간주하는 것이 가장 좋으며 새로운 브라우저 버전이 출시되면 나중에 실패 할 가능성이 높습니다 (Edge도 언급하지 않을 것입니다).
Jeff Mergler

1

나는이 코드를 처음부터 다시 쓰지 말 것을 권한다. 특정 IE 버전뿐만 아니라 다른 브라우저, 운영 체제 및 Retina 디스플레이의 존재 여부를 테스트 할 수있는 Conditionizr 라이브러리 ( http://conditionizr.com/ ) 를 사용하는 것이 좋습니다 .

필요한 특정 테스트에 대해서만 코드를 포함 시키십시오. 또한 많은 반복을 거쳐 테스트를 거친 라이브러리의 이점을 얻을 수 있습니다 (코드를 손상시키지 않고 쉽게 업그레이드 할 수 있음).

또한 Modernizr과 잘 맞아 특정 브라우저가 아닌 특정 기능을 테스트하는 것이 더 나은 모든 경우를 처리 할 수 ​​있습니다.


1

나는 그것을 좋아한다 :

<script>
   function isIE () {
       var myNav = navigator.userAgent.toLowerCase();
       return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
   }    
   var ua = window.navigator.userAgent;
   //Internet Explorer | if | 9-11

   if (isIE () == 9) {
       alert("Shut down this junk! | IE 9");
   } else if (isIE () == 10){
       alert("Shut down this junk! | IE 10");
   } else if (ua.indexOf("Trident/7.0") > 0) {
       alert("Shut down this junk! | IE 11");
   }else{
       alert("Thank god it's not IE!");
   }

</script>

1

IE를 탐지하는이 접근 방식은 조건부 주석을 사용하는 jKey의 답변과 사용자 에이전트를 사용하는 Owen의 답변의 강점을 결합하고 약점을 피합니다.

  • jKey의 접근 방식은 버전 9까지 작동하며 IE 8 & 9에서 사용자 에이전트 스푸핑에 영향을받지 않습니다.
  • Owen의 접근 방식은 IE 5 및 6 (보고 7)에서 실패 할 수 있으며 UA 스푸핑에 취약하지만 IE 버전> = 10 (현재는 Owen의 답변을 나타내는 12를 포함하여)을 감지 할 수 있습니다.

    // ----------------------------------------------------------
    // A short snippet for detecting versions of IE
    // ----------------------------------------------------------
    // If you're not in IE (or IE version is less than 5) then:
    //     ie === undefined
    // Thus, to detect IE:
    //     if (ie) {}
    // And to detect the version:
    //     ie === 6 // IE6
    //     ie > 7 // IE8, IE9 ...
    // ----------------------------------------------------------
    var ie = (function(){
        var v = 3,
            div = document.createElement('div'),
            all = div.getElementsByTagName('i');
    
        while (
            div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
            all[0]
        );
        if (v <= 4) { // Check for IE>9 using user agent
            var match = navigator.userAgent.match(/(?:MSIE |Trident\/.*; rv:|Edge\/)(\d+)/);
            v = match ? parseInt(match[1]) : undefined;
        }
        return v;
    }());

이것은 IE 버전을 포함하는 문서에 유용한 클래스를 설정하는 데 사용할 수 있습니다.

    if (ie) {
        document.documentElement.className += ' ie' + ie;
        if (ie < 9)
            document.documentElement.className += ' ieLT9';
    }

IE가 호환 모드에있는 경우 사용중인 호환성 모드를 감지합니다. 또한 IE 버전은 대부분 이전 버전 (<10)에 유용합니다. 높은 버전은 표준을 준수하며, modernizr.js와 같은 기능을 사용하여 기능을 확인하는 것이 좋습니다.


1

이를 위해 편리한 밑줄 믹스 인을 만들었습니다.

_.isIE();        // Any version of IE?
_.isIE(9);       // IE 9?
_.isIE([7,8,9]); // IE 7, 8 or 9?

_.mixin({
  isIE: function(mixed) {
    if (_.isUndefined(mixed)) {
      mixed = [7, 8, 9, 10, 11];
    } else if (_.isNumber(mixed)) {
      mixed = [mixed];
    }
    for (var j = 0; j < mixed.length; j++) {
      var re;
      switch (mixed[j]) {
        case 11:
          re = /Trident.*rv\:11\./g;
          break;
        case 10:
          re = /MSIE\s10\./g;
          break;
        case 9:
          re = /MSIE\s9\./g;
          break;
        case 8:
          re = /MSIE\s8\./g;
          break;
        case 7:
          re = /MSIE\s7\./g;
          break;
      }

      if (!!window.navigator.userAgent.match(re)) {
        return true;
      }
    }

    return false;
  }
});

console.log(_.isIE());
console.log(_.isIE([7, 8, 9]));
console.log(_.isIE(11));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>


1

또는 단순히

//   IE 10: ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'; 
//   IE 11: ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'; 
// Edge 12: ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0'; 
// Edge 13: ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586'; 

var isIE = navigator.userAgent.match(/MSIE|Trident|Edge/)
var IEVersion = ((navigator.userAgent.match(/(?:MSIE |Trident.*rv:|Edge\/)(\d+(\.\d+)?)/)) || []) [1]

0

IE 버전을 확인하기 위해 찾은 가장 포괄적 인 JS 스크립트는 http://www.pinlady.net/PluginDetect/IE/ 입니다. 전체 라이브러리는 http://www.pinlady.net/PluginDetect/Browsers/ 에 있습니다 . 있습니다.

IE10에서는 조건문이 더 이상 지원되지 않습니다.

IE11에서 사용자 에이전트는 더 이상 MSIE를 포함하지 않습니다. 또한 사용자 에이전트를 사용하는 것은 수정할 수 있으므로 신뢰할 수 없습니다.

PluginDetect JS 스크립트를 사용하면 특정 IE 버전을 대상으로하는 매우 구체적이고 잘 만들어진 코드를 사용하여 IE를 감지하고 정확한 버전을 감지 할 수 있습니다. 작업중인 브라우저 버전을 정확하게 관리 할 때 매우 유용합니다.


0

나는 파티에 조금 늦었다는 것을 알고 있지만 브라우저가 IE인지 여부와 10 이하의 버전에 대한 피드백을 제공하는 간단한 한 줄 방법을 확인하고있었습니다. 나는 이것을 버전 11에 대해 코딩하지 않았으므로 아마도 약간의 수정이 필요할 것이다.

그러나 이것은 코드이며 속성과 메서드가있는 객체로 작동하며 탐색기 객체를 긁기보다는 객체 감지에 의존합니다 (스푸핑 될 수있는 결함이 있음).

var isIE = { browser:/*@cc_on!@*/false, detectedVersion: function () { return (typeof window.atob !== "undefined") ? 10 : (typeof document.addEventListener !== "undefined") ? 9 : (typeof document.querySelector !== "undefined") ? 8 : (typeof window.XMLHttpRequest !== "undefined") ? 7 : (typeof document.compatMode !== "undefined") ? 6 : 5; } };

사용법은 isIE.browser부울을 반환하고 조건부 주석에 의존하는 속성입니다.isIE.detectedVersion() 5와 10 사이의 숫자를 반환하는 을 사용합니다. 6보다 낮은 값을 사용하고 심각한 구식 영토에 있다고 가정하고 하나의 라이너와 10보다 높은 것은 당신이 새로운 영역에 있습니다. 조건부 주석을 지원하지 않는 IE11에 대한 내용을 읽었지만 완전히 조사하지는 않았지만 나중에있을 수 있습니다.

어쨌든, 하나의 라이너의 경우 IE 브라우저 및 버전 감지의 기본 사항을 다룹니다. 완벽하지는 않지만 작고 쉽게 수정할 수 있습니다.

참고로, 실제로 이것을 구현하는 방법에 대해 의문이있는 사람은 다음 조건부 도움이 될 것입니다.

var isIE = { browser:/*@cc_on!@*/false, detectedVersion: function () { return (typeof window.atob !== "undefined") ? 10 : (typeof document.addEventListener !== "undefined") ? 9 : (typeof document.querySelector !== "undefined") ? 8 : (typeof window.XMLHttpRequest !== "undefined") ? 7 : (typeof document.compatMode !== "undefined") ? 6 : 5; } };

/* testing IE */

if (isIE.browser) {
  alert("This is an IE browser, with a detected version of : " + isIE.detectedVersion());
}

0

IE와 그 버전을 감지하는 것은 쉬울 수 없으며 필요한 것은 약간의 네이티브 / 바닐라 Javascript입니다.

var uA = navigator.userAgent;
var browser = null;
var ieVersion = null;

if (uA.indexOf('MSIE 6') >= 0) {
    browser = 'IE';
    ieVersion = 6;
}
if (uA.indexOf('MSIE 7') >= 0) {
    browser = 'IE';
    ieVersion = 7;
}
if (document.documentMode) { // as of IE8
    browser = 'IE';
    ieVersion = document.documentMode;
}

그리고 이것은 그것을 사용하는 방법입니다.

if (browser == 'IE' && ieVersion <= 9) 
    document.documentElement.className += ' ie9-';

.

낮은 호환성보기 / 모드의 높은 버전을 포함하여 모든 IE 버전에서 작동하며 documentModeIE 독점입니다.


0

IE 브라우저 버전을 선택 해야하는 경우 아래 코드를 따르십시오. 이 코드는 IE6 ~ IE11 버전에서 잘 작동합니다.

<!DOCTYPE html>
<html>
<body>

<p>Click on Try button to check IE Browser version.</p>

<button onclick="getInternetExplorerVersion()">Try it</button>

<p id="demo"></p>

<script>
function getInternetExplorerVersion() {
   var ua = window.navigator.userAgent;
        var msie = ua.indexOf("MSIE ");
        var rv = -1;

        if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))      // If Internet Explorer, return version number
        {               
            if (isNaN(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))))) {
                //For IE 11 >
                if (navigator.appName == 'Netscape') {
                    var ua = navigator.userAgent;
                    var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
                    if (re.exec(ua) != null) {
                        rv = parseFloat(RegExp.$1);
                        alert(rv);
                    }
                }
                else {
                    alert('otherbrowser');
                }
            }
            else {
                //For < IE11
                alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
            }
            return false;
        }}
</script>

</body>
</html>

0

창 실행 IE10은 IE11 +로 자동 업데이트되며 W3C로 표준화됩니다.

요즘에는 IE8을 지원할 필요가 없습니다.

    <!DOCTYPE html>
    <!--[if lt IE 9]><html class="ie ie8"><![endif]-->
    <!--[if IE 9]><html class="ie ie9"><![endif]-->
    <!--[if (gt IE 9)|!(IE)]><!--><html><!--<![endif]-->
    <head>
        ...
        <!--[if lt IE 8]><meta http-equiv="Refresh" content="0;url=/error-browser.html"><![endif]--
        ...
    </head>

0
var isIE9OrBelow = function()
{
   return /MSIE\s/.test(navigator.userAgent) && parseFloat(navigator.appVersion.split("MSIE")[1]) < 10;
}

0
if (!document.addEventListener) {
    // ie8
} else if (!window.btoa) {
    // ie9
}
// others
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.