[internet-explorer] 인트라넷 호환 모드 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에 두 가지 “클래스”모드가 있다는 것입니다.

  1. 문서 모드
  2. 브라우저 모드

문서 모드는 렌더링 엔진을 결정합니다 (웹 페이지는 어떻게 렌더링되는지).

브라우저 모드는 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");