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

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않으므로이 방법은 전혀 쓸모가 없습니다.

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



답변

이것이 내가 선호하는 방법입니다. 최대 제어 기능을 제공합니다. (참고 : 조건문은 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 에게 감사합니다 .


답변

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
}


답변

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

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

레거시 Internet Explorer 및 attachEvent (MDN)


답변

조건부 주석을 사용하십시오. 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");
}


답변

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

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


답변

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
}


답변

IE8 및 이전 버전을 안정적으로 필터링하기 위해 전역 객체 검사를 사용할 수 있습니다.

if (document.all && !document.addEventListener) {
    alert('IE8 or lower');
}