기본적으로 IE8은 인트라넷 웹 사이트를 호환 모드로 만듭니다. 메타 헤더를 IE8로 변경하려고 시도했지만 메타 헤더를 확인하지 않고 브라우저 설정 만 사용합니다. 누구나 이것을 비활성화하는 방법을 알고 있습니까?
기본적으로 IE8은 인트라넷 웹 사이트를 호환 모드로 만듭니다. 메타 헤더를 IE8로 변경하려고 시도했지만 메타 헤더를 확인하지 않고 브라우저 설정 만 사용합니다. 누구나 이것을 비활성화하는 방법을 알고 있습니까?
답변:
인트라넷에서 호환성 모드를 무시할 수 있습니다.
IIS의 경우 아래 코드를 web.config에 추가하십시오. IE9에서 나를 위해 일했습니다.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
아파치와 동일 :
Header set X-UA-Compatible: IE=Edge
그리고 nginx의 경우 :
add_header "X-UA-Compatible" "IE=Edge";
그리고 express.js의 경우 :
res.set('X-UA-Compatible', 'IE=Edge')
Michael Irigoyen은 정확하지만 조금 더 복잡합니다 ...
Paul Irish의 훌륭한 상용구를 사용하는 경우 다음과 같은 것이 있습니다.
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
이것은 예상대로 작동하지 않으며 IE의 강제 호환 모드로 강제 실행됩니다. "호환성보기에 인트라넷 사이트 표시"를 선택한 경우 인트라넷 환경 . 인트라넷 호환성 모드를 방지하려면 조건부 IE 주석을 제거해야합니다.
따라서 다음 코드가 작동합니다.
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
기본적으로 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
명령문 전에 조건부 IE 주석을 트리거 하면 기본 설정으로 IE9를 실행하는 경우 인트라넷 환경 에서 호환 모드로 강제 설정됩니다.
업데이트-추가 정보 : 그러나 HTML5 상용구를 작동시키는 비법이 있습니다.
DOCTYPE 앞에 emtpy, 조건부 주석을 추가하십시오 . 당신이 할 때 참고 아니라 있다는 것을 , 당신은 할 수 있습니다 또한 주위에 조건부 주석을 추가 할 X-UA-Compatible
뿐만 아니라 페이지가 HTML5-유효하고, 지시어. 예를 들어 :
<!--[if HTML5]><![endif]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
이 답변의 첫 번째 부분에서 영감을받은 블로그 게시물 , 자세한 내용을 가지고있다. 그건 그렇고 : 로 그 블로그 게시물에서 언급 한도 함께 DOCTYPE 전에 조건부 코멘트를 대체 할 수있는 반 조건 과 코멘트 없음 상태 : <!--[]-->
. 따라서 다음과 같이 :
<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
그러나 후자의 변형 ( <--[]--><!DOCTYPE html>
)은 예를 들어 다른 질문에 대한이 답변에서 설명 된 바와 같이 , X-UA-Compatioble
(IE7 및 IE6에 대한 지원이없는 레거시 IE 버전의 경우) 브라우저를 브라우저로 가져옵니다. 쿼크 모드.
"도구"메뉴를 풀다운하고 "호환성보기 설정"을 선택하면 하단의 대화 상자에 "호환 모드로 인트라넷 사이트 표시"설정이 있습니다. 이 옵션을 선택 해제하면 문제가 해결되고 IE는 DOCTYPE을 기반으로 모드를 사용합니다.
이 질문에 대한 답변에는 어느 정도 혼란이 있습니다.
최고 답변은 현재 http 헤더에 플래그를 설정하는 서버 측 솔루션이며 일부 주석은 메타 태그를 사용하는 솔루션이 작동하지 않음을 나타냅니다.
이 블로그 항목은 호환성 메타 정보를 사용하는 방법에 대한 훌륭한 개요를 제공하며 내 경험에 따르면 http://blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x- UA- 호환 가능-내구성-기업 웹 -applications.aspx
요점 :
한 가지 중요한 점 (그리고이 점에서 많은 혼란이 온다고 생각합니다)은 IE에 두 가지 "클래스"모드가 있다는 것입니다.
문서 모드는 렌더링 엔진을 결정합니다 (웹 페이지는 어떻게 렌더링되는지).
브라우저 모드는 UA (User-Agent) 문자열 IE가 서버로 보내는 내용, 문서 모드 IE의 기본값, IE가 조건부 주석을 평가하는 방법을 결정합니다.
문서 모드와 브라우저 모드에 대한 자세한 내용은이 기사에서 찾을 수 있습니다. http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for- site-developers.aspx? Redirected = true
내 경험상 호환성 메타 데이터는 문서 모드에만 영향을 미칩니다. . 따라서 브라우저 감지에 의존하는 경우 도움이되지 않습니다. 그러나 기능 감지를 사용하는 경우이 방법을 사용해야합니다.
따라서이 구문을 사용하여 메타 태그 (html 페이지에서)를 사용하는 것이 좋습니다.
<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>
참고 : 테스트 한 브라우저 모드 목록을 제공하십시오.
블로그 게시물은 EmulateIEX 사용에 대한 조언도 제공합니다. 여기 인용문이 있습니다 :
즉, 응용 프로그램이 EmulateIE7 또는 EmulateIE8을 요청할 때 이상한 점이 있습니다. 이 에뮬레이션 모드 자체는 결정입니다. 따라서 원하는 것을 구체적으로 지정하는 대신 두 가지 중 하나를 요청한 다음 DOCTYPE 코드의 다른 부분을보고 두 가지 중 하나를 결정하고 DOCTYPE이 표준을 제공하는지 여부를 이해하려고 시도합니다. 또는 내용에 따라 문제가 생길 수 있습니다. 때로는 혼란스러운 작업도 있습니다. 그보다는 질문 자체에 대한 응답을 제공하는 대신 원하는 것을 직접 지정하는 것이 훨씬 더 의미가 있다고 생각합니다. IE7 표준을 원하면 IE = EmulateIE7 대신 IE = 7을 사용하십시오. (이것은 DOCTYPE을 사용해서는 안된다는 것을 의미하지는 않습니다.)
이 메타 태그를 사용해보십시오.
<meta http-equiv="X-UA-Compatible" content="IE=8" />
"인트라넷 또는 모든 웹 사이트에 대해"호환성보기로 인트라넷 사이트 표시 "가 선택된 경우에도 IE8을 IE8 표준 모드로 렌더링해야합니다. IE 8.0.6에서 직접 시도했습니다.
Google 시스템 관리자는 조직 전체의 확인란을 선택 취소하여이 문제를 해결했습니다. 사용자는 로그 오프 할 필요조차 없었습니다.
확인 된 인트라넷 호환성보기를 재정의 할 수있는 실제 답변을 찾았습니다. 페이지의 OnInit 이벤트에 다음 행을 추가하십시오 (meta 또는 web.config customHeader 필요 없음).
Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
헤더에 다음을 입력하십시오.
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
의례 Paul Irish의 HTML5 보일러 플레이트 (하지만 XHTML 과도기에서도 작동)
나뿐만 메타 태그를 지정하여 호환성 모드를 오버라이드 (override) 할 수 있었다 첫 번째 태그를 , 머리 부분에서뿐만 아니라 최초의 메타 태그를하지만, 같은 만로 첫 TAG .
귀하의 탁월한 답변에 나를 넣은 @ stefan.s에게 감사드립니다. 내가 읽기 전에 :
이 작동하지 않았습니다
<head>
<link rel="stylesheet" type="text/css" href="https://stackoverflow.com/qmuat/plugins/editors/jckeditor/typography/typography.php"/>
<meta http-equiv="x-ua-compatible" content="IE=9" >
링크 태그를 비켜서 작동했습니다.
이 작품 :
<head><meta http-equiv="x-ua-compatible" content="IE=9" >
따라서 호환성을 사용하도록 설정된 IE8 클라이언트는 페이지를 IE8 표준 모드로 렌더링합니다. content = 'IE = 9'는 IE9 이하의 표준을 사용함을 의미합니다.
이것은 정확히 해결책은 아니지만 그것이 최선이라고 생각합니다. 인트라넷 사이트에서는 Firefox를 통해서만 액세스 할 수 있다고 사람들에게 알려주며, 주변의 IE 사용자에게는 친절하지 않습니다. 서버 또는 클라이언트 측의 사용자 에이전트를 확인하여 IE에서의 액세스를 거부하십시오. 그리고 저는 .NET 프로그래머입니다.
나는이 문제로 어려움을 겪고 독특한 솔루션과 통찰력을 제공하도록 돕고 싶었습니다.
특정 AJAX 기반 프레임 워크는 시작 부분에 자바 스크립트 및 스타일 시트를 삽입 할 것이며 <head>
,이를 수행하면 잘 확립 된 메타 태그 솔루션이 제대로 작동하지 못하게됩니다. 이 경우 Andras Csehi의 답변과 마찬가지로 HTTP 응답 헤더에 직접 주입하면 문제가 해결된다는 것을 알았습니다.
그러나 자바 서블릿을 사용하는 사람들에게는 이것을 해결하는 좋은 방법은 ServletFilter를 사용하는 것입니다.
public class EmulateFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletResponse response = ((HttpServletResponse)arg1);
response.addHeader("X-UA-Compatible", "IE=8");
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
RequestInterceptor 메소드에 한 줄을 추가하여 Spring-Apache-tomcat 환경에서이 문제를 해결할 수 있습니다.
//before the actual handler will be executed
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
// Some logic
// below statement ensures IE trusts the page formatting and will render it acc. to IE 8 standard.
response.addHeader("X-UA-Compatible", "IE=8");
return true;
}
참조- 필터를 만들고 응답 헤더를 수정 하는 방법 RequestInterceptor (Spring)를 통해이 문제를 해결하는 방법을 다룹니다.
웹 사이트가 IE 8 표준 모드를 사용하도록하려면이 메타 태그를 유효한 DOCTYPE과 함께 사용하십시오.
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
일반 "IE8"이 아닌 "EmulateIE8"값을 참고하십시오.
IE 개발자에 따르면 "IE8 표준 모드에서는 표준 DOCTYPE 표시, Quirks 모드에서는 Quik DOCTYPE 표시. 클라이언트 시스템의 호환성보기를 재정의하고 표준을 IE8 표준으로 강제 적용하려면이 태그를 사용해야합니다."
이 IE 블로그 게시물에 대한 추가 정보 : http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx
이 질문은 인트라넷에서 Force "Internet Explorer 8"브라우저 모드 의 복제본입니다 .
응답은 서버 측에서 호환성보기 ( https://stackoverflow.com/a/4130343/24267 )를 비활성화 할 수 없음을 나타냅니다 . 내가 시도한 제안 중 어느 것도 효과가 없었기 때문에 분명히 그럴 것 같습니다. IE8에서 "브라우저 모드"는 어떤 종류의 X-UA 호환 헤더를 보내든 Internet Explorer 8 호환성보기로 설정됩니다.
IE7 및 호환성 모드에 대한 특수 처리를 수행해야했기 때문에 브라우저에서 IE8을 사용하여 렌더링했지만 IE7이라고보고 내 코드가 손상되었습니다. 이것은 내 코드를 수정 한 방법입니다 (이것은 끔찍한 핵이며 브라우저 버전이 아닌 기능을 테스트해야한다는 것을 알고 있습니다).
isIE8 = navigator.appVersion.indexOf ( "MSIE")! = -1 && parseFloat (navigator.appVersion.split ( "MSIE") [1]) == 8; if (! isIE8 && navigator.appVersion.indexOf ( "MSIE")! = -1 && parseFloat (navigator.appVersion.split ( "MSIE") [1]) == 7 && navigator.appVersion.indexOf ( "Trident") ! = -1) { // 거짓말 쟁이, 이것은 호환 모드의 IE8입니다. isIE8 = 참; }
이것을 페이지 헤드 태그 안에 추가하십시오 (원하는 IE 버전을 대상으로 함).
<meta http-equiv="X-UA-Compatible" content="IE=8" />
참고 이 브라우저가에서 호환 모드 말한다는 사실은 변경되지 않습니다 (브라우저 모드라고합니다)을,하지만 페이지가 됩니다 IE8 표준 모드로 렌더링합니다. 그래도 원하는 방식으로 렌더링하지 않으면 IE 버전을 잘못 확인하는 자바 스크립트가 있기 때문일 수 있습니다. 메타 X-UA-Compatible 태그를 설정하더라도 사용자 에이전트 문자열은 여전히 MSIE 7.0 이므로 키 오프해야하는 특성을 판별 하려면 다음 블로그 게시물 을 참조하십시오 .
제 경우에는 수정을 위해 IE7 호환성 모드를 확인해야했습니다. 간단한 자바 스크립트 코드를 사용하여 그렇게했습니다.
//IE8 and later will have the word 'trident' in its user agent string.
if (navigator.userAgent.indexOf("Trident")>-1) { //do something }
모든 사용자에 대해 GPO를 통해이 기능을 사용하지 않으려면이 설정을 읽는 사람이 다음 설정입니다.
컴퓨터 구성 / 관리 템플릿 / Windows 구성 요소 / Internet Explorer / 호환성 로컬 인트라넷에 대한 Internet Explorer 표준 모드보기 / 켜기
web.config 편집이 나를 위해 수정했지만.
.htaccess에서 헤더 변경
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
https://github.com/h5bp/html5-boilerplate/issues/378 에서이 문제에 대한 해결책을 찾았습니다.
문서 모드와 브라우저 모드에 대한 Stefan S의 의견은 내 문제와 관련이 있습니다.
페이지에 X-UA-Content 메타 데이터가 있지만 클라이언트 측에서를 통해 브라우저 버전을 테스트했습니다 navigator.appVersion
. 이 테스트는 문서 모드가 아닌 브라우저 모드를 제공하기 때문에 메타 데이터를 반영하지 않습니다.
나를위한 대답은 document.documentMode
다음과 같은 것을 테스트하는 것이 었습니다 .
function IsIE(n)
{
if (navigator.appVersion.indexOf("MSIE ") == -1) return false;
var sDocMode = document.documentMode;
return (isFinite(sDocMode) && sDocMode==n);
}
이제 메타 X-UA- 콘텐츠 태그가 브라우저 테스트에 반영됩니다.
브라우저를 테스트 할 때 왜 멍청한 짓을합니까? 속도. tableorter와 같은 다양한 jQuery 애드 인은 IE6 / 7에서 너무 느리기 때문에 끄고 싶습니다. 브라우저 기능을 테스트하면이 문제를 해결하는 데 도움이 될지 확실하지 않습니다.