Internet Explorer 11 탐지


125

IE 11에는 다른 모든 IE와 다른 사용자 에이전트 문자열이 있음을 알고 있습니다.

 Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko

이 질문에 대한 답변이 지정된 IE 11을 감지하려고했습니다. '

Jquery가 IE 11을 감지하지 못함

Thats !!navigator.userAgent.match(/Trident\/7\./)

하지만 오류가 발생합니다 Object not found and needs to be re-evaluated.

그런 다음 IE11에서 개발자 콘솔을 열고 미리 정의 된 일부 자바 스크립트 개체에 액세스하려고 시도했지만 여전히 동일한 오류가 발생합니다.

나는 시도했다

navigator.userAgent

window.navigator

console.log('test');

누구든지 그것에 대해 어떤 생각이 있습니까?


@Bobkhin 나는 위에서 내 문제를 언급했습니다. 점점 오류Object not found and needs to be re-evaluated.
Miqdad 알리


답변:


188

2016 년 11 월 18 일 수정

이 코드도 작동합니다 ( ActiveX를 사용하지 않고 다른 솔루션을 선호하는 사용자를 위해 )

var isIE11 = !!window.MSInputMethodContext && !!document.documentMode;
  // true on IE11
  // false on Edge and other IEs/browsers.

원래 답변

Ie11을 확인하려면 다음을 사용할 수 있습니다.

(또는 이것을 실행 하십시오 )

!(window.ActiveXObject) && "ActiveXObject" in window

IE의 모든 VMS가 있습니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력

여기에 이미지 설명 입력

여기에 이미지 설명 입력

주의 사항 : IE11에서는 작동하지 않습니다.

여기에서 볼 수 있듯이 true를 반환합니다.

여기에 이미지 설명 입력

그래서 우리가 뭘 할 수 있지 :

분명히 그들은 머신 비트 공간을 추가했습니다.

ie11 :

"Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko"

ie12 :

"Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko"

그래서 우리는 할 수 있습니다 :

/x64|x32/ig.test(window.navigator.userAgent)

이것은 ie11에 대해서만 true를 반환합니다.


1
@Jan. 예. 이 전체 조건에 대해 IE11 만 true를 반환합니다. 방금 <11이 거짓을 반환한다는 것을 보여주었습니다.
Royi Namir

1
@IanSteffy 이것은 단지 작업의 결과 (!)를 보여주기위한 것입니다. HTML 파일을 열고 스크립트 태그를 추가하고 해당 스크립트 내에서 명령을 실행할 수 있습니다. 여기에서 이것을 실행하십시오 .
Royi Namir

2
x64반환 크롬과 가장자리 모두
유전자 R

3
잠깐, IE12가 있습니까? IE11이 마지막이라고 생각했고 곧 그 어리석은 브라우저에 대해 더 이상 걱정할 필요가 없습니다! ☹
Michael Scheper

1
않습니다 하지 윈도우 7 엔터프라이즈 내 IE 11.0.9600.19431을 위해 작동합니다. 없습니다 window.MSInputMethodContext.
Heinrich Ulbricht

105

MSIE (버전 6에서 11까지)를 빠르게 검색하려면 :

if(navigator.userAgent.indexOf('MSIE')!==-1
|| navigator.appVersion.indexOf('Trident/') > -1){
   /* Microsoft Internet Explorer detected in. */
}

2
두 번째 indexOf()는 안 > -1되는가?
개정

그래, 왜> 0이고> -1이 아닌지 모르겠지만 "Trident /"는 어쨌든 appVersion 문자열에서 훨씬 더 멀리 나타납니다.
chrismarx

22

IE의 버전 9, 10 및 11을 감지하기 위해 다음 기능을 사용합니다.

function ieVersion() {
    var ua = window.navigator.userAgent;
    if (ua.indexOf("Trident/7.0") > -1)
        return 11;
    else if (ua.indexOf("Trident/6.0") > -1)
        return 10;
    else if (ua.indexOf("Trident/5.0") > -1)
        return 9;
    else
        return 0;  // not IE9, 10 or 11
}  

21

위의 모든 답변은 창이나 탐색기가 없다는 사실을 무시합니다. :-)

그런 다음 IE11에서 개발자 콘솔을 열었습니다.

그리고 그것이 말하는 곳입니다

개체를 찾을 수 없으며 다시 평가해야합니다.

네비게이터, 창, 콘솔, 그들 중 아무것도 존재하지 않으며 재평가가 필요합니다. 나는 에뮬레이션에서 그것을 가지고 있습니다. 콘솔을 몇 번 닫고 엽니 다.


5
실제로 질문을 읽고 재평가로 문제에 답 해주셔서 감사합니다.
marknadal

8
나를 위해 일했습니다. 이것이 IE가 죽을 때 전 세계에서 파티가 열리는 이유입니다.
voltrevo

콘솔을 닫고 여는 것이 저에게 효과적이었습니다. Firefox 또는 Chrome에 비해 이상한 동작 (하지만 IE이므로 수치입니다.)
Ectropy

7

IE 11 만 감지하는 매우 안전하고 간결한 방법 은

if(window.msCrypto) { /* I'm IE11 for sure */ }

또는 이와 비슷한
var IE11= !!window.msCrypto;


msCryptowindow.crypto객체 의 접두사 버전이며 IE 11에서만 구현됩니다.
https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto


유일하게 작동하는 솔루션 (가장 짧고 깨끗하며 가장 우아한 솔루션입니다)! Royi Namir /x64|x32/ig.test(window.navigator.userAgent)는 Firefox에도 적용됩니다!
Sándor Zuboly

4

그리고 이것을 구현하는 방법

<script type="text/javascript">
  !(window.ActiveXObject) && "ActiveXObject"
  function isIE11(){
    return !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
  }
</script>

1
기능에 오타가 있다고 생각합니다. 먼저 사용되지 않는 상태 확인을 수행합니다. 둘째, 아마도 && "ActiveXObject" in window. 셋째 : 이중 부정의 트릭은 무엇 !!입니까?
dma_k

1
!! 거의 '부울로 강제'를 의미합니다.
Andrew Grey

4

좋아, 간단하고 IE11 및 IE 11 버전 이하

browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;

navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1IE 11 버전의 navigator.userAgent.toUpperCase().indexOf("MSIE") != -1경우 IE 11 미만 버전

browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;

console.log('Is IE Browser : '+ browserIsIE)


2

이 링크는 도움이되었습니다 . IE11까지 모든 버전의 IE를 감지하는 자바 스크립트 코드가 포함되어 있습니다. IE11 에뮬레이터로 스크립트를 테스트했습니다. IE11 에뮬레이터를 찾으려면 웹 브라우저를 마우스 오른쪽 단추로 클릭하고 "요소 검사"를 클릭하십시오. 페이지 왼쪽 하단에서 탐색 모음을 아래로 스크롤하고 바탕 화면 아이콘을 클릭합니다. "사용자 에이전트 문자열"드롭 다운 상자에는 IE6-11을 에뮬레이션하는 옵션이 포함되어 있습니다.

효과가있다. 이 답변을 작성하기 몇 분 전에 사용했습니다. 스냅 샷을 게시 할 수 없습니다. 평판이 충분하지 않습니다.


이것은 코드입니다. 다시 보려면 링크를 따라 가십시오.

// Get IE or Edge browser version
var version = detectIE();

if (version === false) {
  document.getElementById('result').innerHTML = '<s>IE/Edge</s>';
} else if (version >= 12) {
  document.getElementById('result').innerHTML = 'Edge ' + version;
} else {
  document.getElementById('result').innerHTML = 'IE ' + version;
}

// add details to debug result
document.getElementById('details').innerHTML = window.navigator.userAgent;

/**
 * detect IE
 * returns version of IE or false, if browser is not Internet Explorer
 */
function detectIE() {
  var ua = window.navigator.userAgent;

  // Test values; Uncomment to check result …

  // 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 (Spartan)
  // 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 msie = ua.indexOf('MSIE ');
  if (msie > 0) {
    // IE 10 or older => return version number
    return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
  }

  var trident = ua.indexOf('Trident/');
  if (trident > 0) {
    // IE 11 => return version number
    var rv = ua.indexOf('rv:');
    return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
  }

  var edge = ua.indexOf('Edge/');
  if (edge > 0) {
    // Edge (IE 12+) => return version number
    return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
  }

  // other browser
  return false;
}
@import url(https://fonts.googleapis.com/css?family=Fira+Mono|Fira+Sans:300);
body {
  color: black;
  background-color: white;
  font-family: "Fira Sans", sans-serif;
  font-weight: 300;
  margin: 0;
  padding: 3rem;
}

h1 {
  color: darkgrey;
  text-align: center;
  font-weight: 300;
  font-size: 1.5rem;
  line-height: 2rem;
}

h2 {
  text-align: center;
  font-weight: 300;
  font-size: 4rem;
}

p {
  color: darkgrey;
  text-align: center;
  font-family: "Fira Mono", monospace;
  font-size: 1rem;
  line-height: 1.5rem;
}
<h1>Detect IE/Edge version with JavaScript.<br> Updated to recognize Internet Explorer 12+ aka Edge.</h1>
<h2 id="result">detecting…</h2>
<p id="details">n/a</p>


1

이 RegExp를 사용하면 IE 10 및 IE 11에서 작동하는 것 같습니다.

function isIE(){
    return /Trident\/|MSIE/.test(window.navigator.userAgent);
}

나는 이것을 테스트하기 위해 IE 10보다 오래된 IE가 없습니다.


0

네비게이터 사용 :-

navigator클라이언트 컴퓨터의 브라우저에 대한 모든 정보를 포함하는 객체입니다.

navigator.appName 클라이언트 컴퓨터의 브라우저 이름을 반환합니다.

navigator.appName === 'Microsoft Internet Explorer' ||  !!(navigator.userAgent.match(/Trident/) || navigator.userAgent.match(/rv:11/)) || (typeof $.browser !== "undefined" && $.browser.msie === 1) ? alert("Please dont use IE.") : alert("This is not IE")
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


1
appName은 IE 11의 Netscape입니다. 그들은 개발자를 속이기 위해 최선을 다했습니다.
kagronick 19

0

IE11이 서로 다른 환경에서 둘 이상의 사용자 에이전트 문자열을 제공한다는 것을 알았습니다.

MSIE및 기타 접근 방식 에 의존하는 대신 Trident버전 에 의존하는 것이 좋습니다.

const isIE11 = userAgent => userAgent.match(/Trident\/([\d.]+)/) ? +userAgent.match(/Trident\/([\d.]+)/)[1] >= 7;

도움이 되었기를 바랍니다 :)

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