사용자가 IE를 사용하고 있는지 확인


390

특정 클래스가있는 div를 클릭하여 아래와 같은 함수를 호출합니다.

사용자가 Internet Explorer를 사용하는 경우 기능을 시작할 때 확인할 수 있고 다른 브라우저를 사용하는 경우 IE 사용자에게만 실행되도록 중단 / 취소 할 수있는 방법이 있습니까? 여기에있는 사용자는 모두 IE8 이상 버전이므로 IE7 이하 버전을 다루지 않아도됩니다.

그들이 사용하는 브라우저를 알 수 있다면 훌륭하지만 필수는 아닙니다.

기능 예 :

$('.myClass').on('click', function(event)
{
    // my function
});

1
Modernizer를 사용하여 IE 또는 다른 브라우저를 감지하십시오. stackoverflow.com/questions/13478303/…
chris

7
최신 웹 개발 표준에 따르면 이전 버전의 IE를 시작으로 개발하는 것은 좋지 않습니다.
Rosseyn

7
실제로,이 "나쁜 습관"은 표준 자체에 의해 강요되므로 개발자의 잘못이 아닙니다. 브라우저는 다르게 작동하고 사양은 구현 문제에 대해 너무 부드럽습니다. 하지 버그과 지옥의 하나로서 지루하지 뭔가 만들기 위해 브라우저 검색을 할 수 있습니다. 다른 모범 사례를 제안합니다 With modern web development, it's bad practice to support non-Chromium-based browsers (with Safari not considered to be Chromium-based at all). 죄송하지만,이 광기는 어느 시점에서 어떻게 든
끝나야합니다

2
오늘날 "브라우저 감지"보다 "기능 감지"를 수행하는 것이 좋습니다. 브라우저가 대신 필요한 것을 수행하는지 묻습니다.
Chris Rogers

2
@Chris-사과 ... 더 많은 조키 톤을 가지게되었습니다. 나는 기쁨을 훔치고 괴로움과 좌절로 인해 IE를 비난 할 것입니다. :)
JDB는 여전히

답변:


477

아래 JavaScript 방법을 사용하십시오.

function msieversion() 
{
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    if (msie > 0) // If Internet Explorer, return version number
    {
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    }
    else  // If another browser, return 0
    {
        alert('otherbrowser');
    }

    return false;
}

아래의 Microsoft 지원 사이트에서 자세한 내용을 확인할 수 있습니다.

스크립트에서 브라우저 버전을 확인하는 방법

업데이트 : (IE 11 지원)

function msieversion() {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))  // If Internet Explorer, return version number
    {
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    }
    else  // If another browser, return 0
    {
        alert('otherbrowser');
    }

    return false;
}

27
ua 변수가 MSIE로 시작하지 않기 때문에 이것이 잘 작동하지만 쓰기 if (msie > 0)가 잘못되었습니다. 값을 찾지 못하면 indexOf () 함수는 0이 아닌 -1을 반환합니다. 따라서 if (msie > -1)더 설명이 필요합니다.
Neville Nazerane

61
이것은 IE11에서 NaN을 반환합니다.
verism

7
@verism 및 기타 : 또한 작동이 답변 확인 IE 11: stackoverflow.com/a/21712356/114029
Leniel Maccaferri

8
navigator.userAgent.indexOf ( "MSIE")> 0 || navigator.userAgent.indexOf ( "Trident")> 0 || navigator.userAgent.indexOf ( "Edge")> 0
tylermauthe

12
/Edge\/|Trident\/|MSIE /.test(window.navigator.userAgent)나는 이것이 10과 11에서 작동한다는 것을 알고 있습니다.
15:23에 불신

595

몇 년 후 Edge 브라우저는 이제 Chromium을 렌더링 엔진으로 사용합니다.
슬프게도 IE 11 확인은 여전히 ​​중요합니다.

고대 버전의 IE는 사라져야하므로보다 간단한 방법이 있습니다.

if (window.document.documentMode) {
  // Do IE stuff
}

여기 내 옛 대답이 있습니다 (2014) :

Edge에서 사용자 에이전트 문자열 이 변경되었습니다.

/**
 * detect IEEdge
 * returns version of IE/Edge or false, if browser is not a Microsoft browser
 */
function detectIEEdge() {
    var ua = window.navigator.userAgent;

    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 => return version number
       return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
    }

    // other browser
    return false;
}

샘플 사용법 :

alert('IEEdge ' + detectIEEdge());

IE 10의 기본 문자열 :

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)

IE 11의 기본 문자열 :

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

Edge 12의 기본 문자열 :

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의 기본 문자열 (thx @DrCord) :

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 

Edge 14의 기본 문자열 :

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/14.14300 

Edge 15의 기본 문자열 :

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063 

Edge 16의 기본 문자열 :

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299 

Edge 17의 기본 문자열 :

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134 

Edge 18의 기본 문자열 (삽입 미리보기) :

Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17730 

CodePen에서 테스트 :

http://codepen.io/gapcode/pen/vEJNZN


4
의견을 보내 주셔서 감사합니다. 답변을 아직 확인하지 않았지만 한 가지만 언급하고 싶습니다. 첫 번째 'if'에 'return'이 포함되어 있으므로 나중에 'else'가 필요하지 않습니다.
Mario

30
새로운 버전의 IE에서 사용자 에이전트 라인을 변경하는 이유는 무엇입니까? MS는 우리가 그들의 끔찍한 웹 브라우저를 감지하는 것을 진지하게 원하지 않습니다.
c00000fd 2019

3
@SameerAlibhai 이론적으로는 좋지만 실제로는 특히 실용적이지 않습니다. 하나의 "기능"감지가 포함되지 않으며 특정 기능에 브라우저에 대한 지식만으로는 해결할 수있는 구현 문제가있는 경우가 종종 있습니다. 브라우저 통계 수집과 같은 간단한 작업을 수행하려면 어떻게합니까?
약간

34
Edge는 실제로 'IE12'가 아니라 실제로 완전히 별도의 브라우저입니다. Windows 10에는 IE11과 Edge가 모두 설치되어 있습니다.
moloko

16
IE에 대한 나의 증오는 성장
계산법 캐년에게

135

브라우저가 IE인지 아닌지 알고 싶다면 다음과 같이하십시오.

var isIE = false;
var ua = window.navigator.userAgent;
var old_ie = ua.indexOf('MSIE ');
var new_ie = ua.indexOf('Trident/');

if ((old_ie > -1) || (new_ie > -1)) {
    isIE = true;
}

if ( isIE ) {
    //IE specific code goes here
}

업데이트 1 : 더 나은 방법

나는 이것을 추천합니다. 여전히 읽을 수 있으며 코드가 훨씬 적습니다. :)

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);

if ( isIE ) {
  //IE specific code goes here
}

단축 답변에 대한 의견에 JohnnyFun에게 감사드립니다 :)

업데이트 2 : CSS에서 IE 테스트

먼저 가능한 경우 @supports브라우저가 특정 CSS 기능을 지원하는지 확인하기 위해 JS 대신 명령문 을 사용해야 합니다.

.element {
  /* styles for all browsers */
}

@supports (display: grid) {
  .element {
    /* styles for browsers that support display: grid */
  }
}

(IE는 전혀 지원하지 않으며 명령문 @supports안에 배치 된 스타일은 무시합니다 @supports.)

문제를 해결할 수없는 경우 @supports다음을 수행하십시오.

// JS

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);

if ( isIE ) {
  document.documentElement.classList.add('ie')
}
/* CSS */

.element {
  /* styles that apply everywhere */
}

.ie .element {
  /* styles that only apply in IE */
}

(참고 : classListJS에 비교적 익숙하지 않으며 IE 브라우저 중 IE11에서만 작동한다고 생각합니다. IE10에서도 가능합니다.)

프로젝트에서 SCSS (Sass)를 사용하는 경우 다음과 같이 단순화 할 수 있습니다.

/* SCSS (Sass) */

.element {
  /* styles that apply everywhere */

  .ie & {
    /* styles that only apply in IE */
  }
}

업데이트 3 : Microsoft Edge 추가 (권장되지 않음)

Microsoft Edge를 목록에 추가하려면 다음을 수행하십시오. 그러나 Edge는 IE보다 훨씬 유능한 브라우저이므로 권장하지 않습니다 .

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident|Edge\//.test(ua);

if ( isIE ) {
  //IE & Edge specific code goes here
}

5
또는 몇 바이트에서 동일 : ms_ie = ~ ua.indexOf ( 'MSIE') || ~ ua.indexOf ( 'Trident /'); ;-)
Simon Steinberger

12
내 버전은 바이트 : 항상 좋은 적은 사람에 불구하고 훨씬 더 즉각적인 의미가 있지만
다니엘 TONON을

7
또는ms_ie = !!ua.match(/MSIE|Trident/)
xori

5
또는 ms_ie = /MSIE|Trident/.test(ua)
JohnnyFun

1
@SimonSteinberger는 ~어떤 의미가 있습니까?
1.21 기가 와트

45

true모든 버전의 Internet Explorer에 대해 다음을 반환 합니다.

function isIE(userAgent) {
  userAgent = userAgent || navigator.userAgent;
  return userAgent.indexOf("MSIE ") > -1 || userAgent.indexOf("Trident/") > -1 || userAgent.indexOf("Edge/") > -1;
}

userAgent매개 변수는 선택 사항이며 기본값은 브라우저의 사용자 에이전트입니다.


이것은 좋지만 기본적으로 IE 브라우저에 기본 "return true"또는 "return 1"값을 설정하는 것을 잊었습니다. IE 브라우저가 감지되면 현재 값을 반환하지 않습니다.
빈센트 에드워드 Gedaria Binua

10
Edge를 IE로 취급하려는 이유는 무엇입니까? 호환성 측면에서 요즘에는 공통점이 거의 없습니다.
minexew

@docta_faustus userAgent는 전역 변수가 아닌 매개 변수입니다.
bendytree

29

이것이 Angularjs 팀이 수행하는 방식입니다 ( v 1.6.5 ).

var msie, // holds major version number for IE, or NaN if UA is not IE.

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

그런 다음 코드를 사용하여 여러 줄로 흩어져 있습니다.

if (event === 'input' && msie <= 11) return false;

if (enabled && msie < 8) {

window.document.documentMode는 MS Edge에서 정의되지 않았습니다
Veselin Vasilev

25
MS Edge는 IE가 아니기 때문에 MS Edge에서 정의되지 않았습니다!
JCKödel

1
document.documentModeIE8 +에서 지원됩니다. 그것은 것입니다 'undefined'... 에지 또는 크롬 / 파이어 폭스. 이 코드를 var IEver = window.document.documentMode || (window.attachEvent? 1 : 99);IE8 +의 경우 IE 버전, IE 이외의 브라우저의 경우 99 (일반적으로 최신 브라우저 임), 이전 IE5-7의 경우 1을 반환 하도록이 코드를 변경 했습니다. 우리는 일반적으로 일부 오래된 IE에만 ​​특별한 작업이 필요하기 때문에 작성되었습니다. 그래서, if (IEver < 9) { ... }그것은 오래된 IE 인 경우 의미
S.Serpooshan

29

네비게이터 객체를 사용하여 사용자 탐색기를 감지 할 수 있으며 jquery가 필요하지 않습니다.

<script type="text/javascript">

if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) || navigator.userAgent.indexOf("Trident/") > -1 ){ 

 // Do stuff with Internet-Exploders ... :)
}

</script>

http://www.javascriptkit.com/javatutors/navigator.shtml


4
이것은 나의 IE11에 대해 거짓을줍니다
Curtis

2
IE11의 사용자 에이전트는 MSIE (XX)와 다릅니다. IE11은 Trident를 확인하여 찾을 수 있습니다.
Orpheus

이것은 Firefox 45.0.2에서 오탐 (false positive)을 나타냅니다.
Tim S. Van Haren

잘못된 테스트 indexOf는 테스트 함수 정규 표현식처럼 true 또는 false를 반환하지 않습니다. navigator.userAgent.indexOf ( "Trident /")! = -1
Dahar Youssef

10

위의 답변을 사용하여; 단순 및 요약 반환 부울 ​​:

var isIE = /(MSIE|Trident\/|Edge\/)/i.test(navigator.userAgent);


1
Widnows 10의 FireFox 44.0.2에서 false를 반환합니다. 어떤 @ FireFox 버전에서 true @ SiKni8을 반환합니까?
Arthur Hebert

9

방법 01 :
$ .browser는 jQuery 버전 1.3에서 더 이상 사용되지 않으며 1.9에서 제거되었습니다.

if ( $.browser.msie) {
  alert( "Hello! This is IE." );
}

방법 02 :
조건부 주석 사용

<!--[if gte IE 8]>
<p>You're using a recent version of Internet Explorer.</p>
<![endif]-->

<!--[if lt IE 7]>
<p>Hm. You should upgrade your copy of Internet Explorer.</p>
<![endif]-->

<![if !IE]>
<p>You're not using Internet Explorer.</p>
<![endif]>

방법 03 :

 /**
 * Returns the version of Internet Explorer or a -1
 * (indicating the use of another browser).
 */
function getInternetExplorerVersion()
{
    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 );
}

방법 04 :
JavaScript / 수동 감지 사용

/*
     Internet Explorer sniffer code to add class to body tag for IE version.
     Can be removed if your using something like Modernizr.
 */
 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]);

     //append class to body for use with browser support
     if (v > 4)
     {
         $('body').addClass('ie' + v);
     }

 }());

참조 링크


@ radhe 나는 이것이 당신에게 도움이되기를 바랍니다.
Aamir Shahzad

참고 : 방법 2 는 표준 모드에서 IE10 이상에서 작동하지 않습니다. 자세한 정보 : 조건부 주석은 더 이상 지원되지 않습니다
insertusername 여기

@insertusername 여기에 매우 적합합니다. 즉, .ie10클래스 사용은 ie10에 대해서만 CSS 수정을 수행하는 경우 가장 좋은 옵션 중 하나 라고 생각 합니다. Internet Explorer 10 ".ie10"에서 HTML 요소에 클래스를 추가 <html class="ie10">하면 다음과 같이 사용할 수 있습니다..ie10 .myclass {//some css here}
Aamir Shahzad

8

브라우저가 IE11 이상인지 확인하고 싶었습니다.

function isCrappyIE() {
    var ua = window.navigator.userAgent;
    var crappyIE = false;
    var msie = ua.indexOf('MSIE ');
    if (msie > 0) {// IE 10 or older => return version number        
        crappyIE = true;
    }
    var trident = ua.indexOf('Trident/');
    if (trident > 0) {// IE 11 => return version number        
        crappyIE = true;
    }
    return crappyIE;
}   

if(!isCrappyIE()){console.table('not a crappy browser);}

2
이것은 명명 규칙 표준에 대한 높은 평가에 대한 나의 투표를 얻는다
redbandit

7
function detectIE() {
    var ua = window.navigator.userAgent;
    var ie = ua.search(/(MSIE|Trident|Edge)/);

    return ie > -1;
}

질문에 대답하지 않습니다. Edge는 IE가 아닙니다.
hda

hda, 2013 년부터의 질문 날짜, 오늘, "Edge"를 무시하지 않는 것이 재미 있다고 생각합니다
Boss COTIGA

5

Modernizr 사용

Modernizr.addTest('ie', function () {
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf('MSIE ') > 0;
    var ie11 = ua.indexOf('Trident/') > 0;
    var ie12 = ua.indexOf('Edge/') > 0;
    return msie || ie11 || ie12;
});

Edge가 IE가 아니기 때문에 질문에 대답하지 않습니다. 또한 Edge는 IE12가 아닙니다. Chromium 기반 Edge가 출시되면이 목록에 Chrome 또는 Opera도 추가해야합니다. (이것으로 무엇을 원하든 Firefox를 감지하는 것이 더 쉬울 것입니다)
hda

5

또는이 정말 짧은 버전은 브라우저가 Internet Explorer 인 경우 true를 반환합니다.

function isIe() {
    return window.navigator.userAgent.indexOf("MSIE ") > 0
        || !!navigator.userAgent.match(/Trident.*rv\:11\./);
}

4

브라우저가 IE인지 아닌지를 감지하는 또 다른 간단한 (아직 읽을 수있는) 함수는 전혀 무시하지 않는 Edge를 무시합니다.

function isIE() {
  var ua = window.navigator.userAgent;
  var msie = ua.indexOf('MSIE '); // IE 10 or older
  var trident = ua.indexOf('Trident/'); //IE 11

  return (msie > 0 || trident > 0);
}

3

useragent를 사용하지 않으려면 브라우저가 IE인지 확인하기 위해이 작업을 수행 할 수도 있습니다. 주석 처리 된 코드는 실제로 IE 브라우저에서 실행되며 "false"를 "true"로 바꿉니다.

var isIE = /*@cc_on!@*/false;
if(isIE){
    //The browser is IE.
}else{
    //The browser is NOT IE.
}   

1
IE11은 조건부 컴파일을 지원하지 않습니다
Gabriel Llamas

방금 시도했지만 여전히 작동했습니다. 지원하지 않습니까?
dev4life

3

나는 이것이 오래된 질문이라는 것을 알고 있지만, 누군가가 그것을 다시 만나서 IE11 감지에 문제가있는 경우, 모든 현재 버전의 IE에 대한 작동 솔루션입니다.

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

3

나는 이것을 사용했다

function notIE(){
    var ua = window.navigator.userAgent;
    if (ua.indexOf('Edge/') > 0 || 
        ua.indexOf('Trident/') > 0 || 
        ua.indexOf('MSIE ') > 0){
       return false;
    }else{
        return true;                
    }
}

2

여기에 많은 답변이 있으며 입력 내용을 추가하고 싶습니다. IE 11은 flexbox와 관련하여 그런 엉덩이였습니다 ( 여기의 모든 문제와 불일치 참조) ). 사용자가 IE 브라우저 (최대 11 포함)를 사용하고 있지만 Edge를 제외하고 있는지 확인하는 쉬운 방법이 실제로 필요했습니다. 꽤 좋은.

여기에 주어진 답변을 바탕으로 전역 부울 변수를 반환하는 간단한 함수를 작성했습니다. IE를 확인하는 것은 매우 쉽습니다.

var isIE;
(function() {
    var ua = window.navigator.userAgent,
        msie = ua.indexOf('MSIE '),
        trident = ua.indexOf('Trident/');

    isIE = (msie > -1 || trident > -1) ? true : false;
})();

if (isIE) {
    alert("I am an Internet Explorer!");
}

이렇게하면 조회를 한 번만 수행하면되며 각 함수 호출에서 결과를 가져 오는 대신 결과를 변수에 저장합니다. (내가 아는 한 사용자 에이전트가 DOM과 관련이 없으므로이 코드를 실행할 준비가 된 문서를 기다릴 필요조차 없습니다.)


2

jquery 버전> = 1.9를 사용하는 경우 이것을 시도하십시오 .

var browser;
jQuery.uaMatch = function (ua) {
    ua = ua.toLowerCase();

    var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
        /(webkit)[ \/]([\w.]+)/.exec(ua) ||
        /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
        /(msie) ([\w.]+)/.exec(ua) || 
        ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
       /(Trident)[\/]([\w.]+)/.exec(ua) || [];

    return {
        browser: match[1] || "",
        version: match[2] || "0"
    };
};
// Don't clobber any existing jQuery.browser in case it's different
if (!jQuery.browser) {
    matched = jQuery.uaMatch(navigator.userAgent);
    browser = {};

    if (matched.browser) {
        browser[matched.browser] = true;
        browser.version = matched.version;
    }

    // Chrome is Webkit, but Webkit is also Safari.
    if (browser.chrome) {
        browser.webkit = true;
    } else if (browser.webkit) {
        browser.safari = true;
    }

    jQuery.browser = browser;
}

사용하는 경우 jQuery를 버전 <1.9 ($ .browser이 jQuery를 1.9에서 제거) 다음 코드를 대신 사용합니다

$('.myClass').on('click', function (event) {
    if ($.browser.msie) {
        alert($.browser.version);
    }
});

고마워 불행히도 우리는 여전히 1.7.2 버전이며 아직 변경할 수 없습니다.
user2571510

내가 볼 수있는 한, 이것은 Trident 엔진을 기반으로하는 최신 IE를 고려하지 않습니다.
Bram Vanroy

Trident
Rohan Kumar를

1

@SpiderCode의 솔루션은 IE 11에서 작동하지 않습니다. 다음은 특정 기능에 대한 브라우저 감지가 필요한 코드에서 사용한 최고의 솔루션입니다.

이 변경 목록에 따르면 IE11은 더 이상 MSIE로보고하지 않습니다. 오 탐지를 피하기위한 것입니다.

만약 당신이 IE를 정말로 알고 싶다면 당신이 할 수있는 것은 navigator.appName이 (테스트되지 않은) Netscape를 반환한다면 사용자 에이전트에서 Trident / 문자열을 감지하는 것입니다;

이 답변 덕분에

function isIE()
{
  var rv = -1;
  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 );
  }
  else 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 );
  }
  return rv == -1 ? false: true;
}

1

아래는 인터넷 검색을하는 동안 우아한 방법을 찾았습니다.

/ detect IE
var IEversion = detectIE();

if (IEversion !== false) {
  document.getElementById('result').innerHTML = 'IE ' + IEversion;
} else {
  document.getElementById('result').innerHTML = 'NOT IE';
}

// 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';

  // IE 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 (IE 12+)
  // 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;
}


1
예, 동일하지만 스택 오버플로 사람들은 링크를 공유하고 싶지 않습니다. 여기에서 참조로 링크를 업데이트합니다. 위대한 마리오 주셔서 감사합니다.
Rameshwar Vyevhare 2019

1

문자열 'MSIE'가 -1을 반환하지만 'Trident'와 일치하는 문제를 해결하려면 SpiderCode의 답변으로 업데이트하십시오. NAN을 반환했지만 이제는 해당 버전의 IE에 대해 11을 반환합니다.

   function msieversion() {
       var ua = window.navigator.userAgent;
       var msie = ua.indexOf("MSIE ");
       if (msie > -1) {
           return ua.substring(msie + 5, ua.indexOf(".", msie));
       } else if (navigator.userAgent.match(/Trident.*rv\:11\./)) {
           return 11;
       } else {
           return false;
       }
    }

0

모든 Internet Explorer (최종 테스트 된 12)를 결정할 수 있습니다.

<script>
    var $userAgent = '';
    if(/MSIE/i['test'](navigator['userAgent'])==true||/rv/i['test'](navigator['userAgent'])==true||/Edge/i['test'](navigator['userAgent'])==true){
       $userAgent='ie';
    } else {
       $userAgent='other';
    }

    alert($userAgent);
</script>

여기를 참조하십시오 https://jsfiddle.net/v7npeLwe/


0
function msieversion() {
var ua = window.navigator.userAgent;
console.log(ua);
var msie = ua.indexOf("MSIE ");

if (msie > -1 || navigator.userAgent.match(/Trident.*rv:11\./)) { 
    // If Internet Explorer, return version numbe
    // You can do what you want only in IE in here.
    var version_number=parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)));
    if (isNaN(version_number)) {
        var rv_index=ua.indexOf("rv:");
        version_number=parseInt(ua.substring(rv_index+3,ua.indexOf(".",rv_index)));
    }
    console.log(version_number);
} else {       
    //other browser   
    console.log('otherbrowser');
}
}

콘솔에 결과가 표시되어야합니다. 크롬 검사를 사용하십시오.


0

이 코드를 문서 준비 기능에 넣고 인터넷 탐색기에서만 트리거합니다. Internet Explorer 11에서 테스트되었습니다.

var ua = window.navigator.userAgent;
ms_ie = /MSIE|Trident/.test(ua);
if ( ms_ie ) {
    //Do internet explorer exclusive behaviour here
}

0

이것은 IE 11 버전에서만 작동합니다.

var ie_version = parseInt(window.navigator.userAgent.substring(window.navigator.userAgent.indexOf("MSIE ") + 5, window.navigator.userAgent.indexOf(".", window.navigator.userAgent.indexOf("MSIE "))));

console.log("version number",ie_version);


0

Internet Explorer 또는 Edge 버전을 감지하는 JavaScript 기능

function ieVersion(uaString) {
  uaString = uaString || navigator.userAgent;
  var match = /\b(MSIE |Trident.*?rv:|Edge\/)(\d+)/.exec(uaString);
  if (match) return parseInt(match[2])
}

0

괴롭힘.

사용자 에이전트 문자열에 의존하지 않으려면 몇 가지 속성을 확인하십시오.

if (document.documentMode) 
{
    console.log('Hello Microsoft IE User!');
}

if (!document.documentMode && window.msWriteProfilerMark) {
    console.log('Hello Microsoft Edge User!');
}

if (document.documentMode || window.msWriteProfilerMark) 
{
    console.log('Hello Microsoft User!');
}

if (window.msWriteProfilerMark) 
{
    console.log('Hello Microsoft User in fewer characters!');
}

또한 새로운 Chredge (Anaheim)를 감지합니다.

function isEdg()
{ 

    for (var i = 0, u="Microsoft", l =u.length; i < navigator.plugins.length; i++)
    {
        if (navigator.plugins[i].name != null && navigator.plugins[i].name.substr(0, l) === u)
            return true;
    }

    return false;
}

그리고 이것은 크롬을 감지합니다.

function isChromium()
{ 

    for (var i = 0, u="Chromium", l =u.length; i < navigator.plugins.length; i++)
    {
        if (navigator.plugins[i].name != null && navigator.plugins[i].name.substr(0, l) === u)
            return true;
    }

    return false;
}

그리고이 사파리 :

if(window.safari)
{
    console.log("Safari, yeah!");
}

-1

이렇게 해보십시오

if ($.browser.msie && $.browser.version == 8) {
    //my stuff

}

jQuery는 1.3에서 더 이상 사용되지 않으며 1.9에서 완전히 제거되었습니다.
geca

-1

나는 당신을 도울 것입니다 생각 여기에

function checkIsIE() {
    var isIE = false;
    if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
        isIE = true;
    }
    if (isIE)  // If Internet Explorer, return version number
    {
        kendo.ui.Window.fn._keydown = function (originalFn) {
            var KEY_ESC = 27;
            return function (e) {
                if (e.which !== KEY_ESC) {
                    originalFn.call(this, e);
                }
            };
        }(kendo.ui.Window.fn._keydown);

        var windowBrowser = $("#windowBrowser").kendoWindow({
            modal: true,
            id: 'dialogBrowser',
            visible: false,
            width: "40%",
            title: "Thông báo",
            scrollable: false,
            resizable: false,
            deactivate: false,
            position: {
                top: 100,
                left: '30%'
            }
        }).data('kendoWindow');
        var html = '<br /><div style="width:100%;text-align:center"><p style="color:red;font-weight:bold">Please use the browser below to use the tool</p>';
        html += '<img src="/Scripts/IPTVClearFeePackage_Box/Images/firefox.png"/>';
        html += ' <img src="/Scripts/IPTVClearFeePackage_Box/Images/chrome.png" />';
        html += ' <img src="/Scripts/IPTVClearFeePackage_Box/Images/opera.png" />';
        html += '<hr /><form><input type="button" class="btn btn-danger" value="Đóng trình duyệt" onclick="window.close()"></form><div>';
        windowBrowser.content(html);
        windowBrowser.open();

        $("#windowBrowser").parent().find(".k-window-titlebar").remove();
    }
    else  // If another browser, return 0
    {
        return false;
    }
}

-3

당신이 사용할 수있는 $.browser이름, 공급 업체 및 버전 정보를 얻는 데 .

http://api.jquery.com/jQuery.browser/를 참조하십시오.


7
"이 속성은 jQuery 1.9에서 제거되었으며 jQuery.migrate 플러그인을 통해서만 사용할 수 있습니다."
Reeno
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.