[javascript] JavaScript에서 IE 버전 (v9 이전) 감지
Internet Explorer
v9 이전 버전을 사용하는 경우 웹 사이트 사용자를 오류 페이지로 반송하고 싶습니다 . 지원하는 데 시간과 돈이 가치가 없습니다 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
}
}
이 코드가 트릭을 수행합니까?
아마 내 방식으로 올 몇 가지 의견을 제시하기 위해 :
- 예, 사용자가 위조 할 수 있음을 알고 있습니다
useragent
문자열을 . 걱정하지 않습니다. - 예, 프로그래밍 전문가가 브라우저 유형 대신 기능 지원을 스니핑하는 것을 선호하지만이 경우이 접근법이 의미가 있다고 생각하지 않습니다. 모든 (관련) 비 IE 브라우저가 필요한 기능을 지원한다는 것을 이미 알고 있습니다.
pre-v9 IE
브라우저가 지원하지 않는 있습니다. 사이트 전체에서 기능별로 기능을 확인하는 것은 낭비입니다. - 예, 누군가가
IE v1
(또는> = 20)을 은 ‘badBrowser’가 true로 설정되지 않고 경고 페이지가 제대로 표시되지 않습니다. 그것은 우리가 기꺼이 감수 할 위험입니다. - 예, 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
}
답변
조건부 주석을 사용하십시오. 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');
}