웹 사이트에서 IE9가 호환 모드로 전환되는 이유는 무엇입니까?


197

방금 IE9 베타를 설치했으며 내가 만든 특정 사이트 (HTML5)에 IE9가 수동으로 지시하지 않는 한 호환 모드로 이동합니다. 웹 사이트의 여러 부분을 제거하려고 시도했지만 변경하지 않았습니다. 모든 CSS 포함 제거를 포함합니다. 저의 다른 웹 사이트에서는 괜찮습니다.

또한 IE9는 사용자 설정을 기억하고 자동으로 되돌릴 수 없기 때문에 수동으로 설정하지 마십시오 (적어도 개인 검색 및 캐시 비우기를 통해조차도 방법을 찾지 못했습니다)

어쨌든. 호환성 모드로 이동하는 사이트 : http://alliancesatwar.com/guide/
올바르게 렌더링 되는 사이트 : http://geuze.name/basement/ ( 하나 이상의 하이퍼 링크를 게시 할 수 없음)

둘 다 같은 것을 사용합니다 doctype. 해당 사이트는 동일한 기본 템플릿 (인코딩, 메타 태그, doctype 및 동일한 자바 스크립트)을 사용하여 공통점이 많습니다 (외관 제외).

누군가 나에게 답이 있다면 좋을 것입니다! IE7 모드로 렌더링되는 HTML5 웹 사이트는 꽤 ... 불충분합니다.


5
"호환 모드로 점프"를 설명해주세요. 페이지 새로 고침과 문제로 인해 IE가 호환성보기에서이 페이지를 새로 고쳤다는 풍선이 표시되면 렌더링 엔진의 충돌과 유사한 "하드 어설트"라는 IE 버그를 발견 한 것입니다. . 우리는 이것들을 찾고 수정하는데 관심이 있습니다. connect.microsoft.com/ie에 버그를 신고하십시오 . 감사!
EricLaw

답변:


263

IE9 documentMode에서 작동합니다.

X-UA-Compatible명시 적 documentMode를 설정하기 위한 헤더 / 메타가 없으면 다음을 기반으로 한 모드를 얻게됩니다.

  • 사용자가 이전에 해당 도메인에서 '호환성보기'버튼을 클릭했는지 여부
  • 아마도 IE8 / 9의 렌더러가 충돌하여 이전 렌더러로 넘어가는 사이트의 다른 콘텐츠로 인해 이것이 자동으로 발생했는지 여부;
  • 사용자가 기본적으로 모든 사이트를 호환성보기로 설정했는지 여부
  • IE가 사이트가 인트라넷에 있다고 생각하는지 여부와 기본값은 호환성보기입니다.
  • 해당 사이트가 호환성보기가 필요한 Microsoft 자체 웹 사이트 목록에 있는지 여부

IE 메뉴의 '도구-> 호환성보기 설정'에서 이러한 설정을 변경할 수 있습니다. 물론 해당 메뉴는 숨겨져 숨겨져 있으므로 Alt를 누를 때까지 메뉴가 표시되지 않습니다.

사이트 작성자로서 귀하의 사이트가 표준을 준수한다고 확신하는 경우 (다른 브라우저에서 잘 렌더링하고 기능 감지를 사용하여 사용할 브라우저 대안을 결정) 다음을 사용하는 것이 좋습니다.

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

또는 HTTP 헤더 :

X-UA-Compatible: IE=Edge

사용중인 IE 버전에 관계없이 최신 렌더러를 가져옵니다.


79
중요 사항 : IE 9가 항상 인트라넷 사이트를 호환 모드로 표시하도록 구성된 경우 메타 태그 나 HTTP 헤더가이를 무시하지 않습니다.
Jacob

29
Jacob이 언급했듯이 IE는 기본적으로 모든 로컬 / 인트라넷 사이트를 호환 모드로 표시하도록 설정할 수 있습니다. alt-> Tools Compatability View 설정을 누르고 상자가 선택되어 있지 않은지 확인하십시오.
코리 Mawhorter

30
메타 태그는 <head> 바로 뒤에 넣을 때만 작동했습니다 (아래 답변 참조). <head> 요소 내에 더 아래로 내려 놓으면 작동하지 않습니다 (아직 찢어진 페이지가 있습니다).
Boris van Schooten

13
@Jacob : 오해의 소지가 있습니다. 예, 브라우저 모드와 호환되며 나갈 수 없습니다. 그러나 여전히 HTTP 헤더를 사용하여 IE의 모든 버전이 사이트에 가장 적합한 문서 모드를 설정할 수 있습니다. IE = Edge는 항상 최신 렌더링 엔진을 제공해야합니다. 따라서 기술적으로 호환 모드에 있더라도 일반 모드 에서처럼 페이지를 렌더링 할 수 있습니다. 내가 틀렸지 만 적어도 인트라넷 사이트가 "호환성보기에 인트라넷 사이트 표시"설정을 선택한 경우에도 정확하게 작동합니다.
mkataja

7
@BorisvanSchooten : 이것이 이유인지는 모르겠지만 <meta>태그는 처리 된 HTML 파일의 첫 512 바이트 내에 있어야합니다. 모든 종류의 PHP를 사용할 수 있기 때문에 "processed"라고 말하지만 렌더링 된 코드가 중요합니다. 요구 사항을 위반하지 않도록 태그 <meta>아래에 대한 모든 의견을 어디에 두었습니까 <meta>?
doubleJ

33

나는 넣어

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

후 첫 번째

<head>

(어딘가에 읽었고, 기억할 수 없다)

나는 그것이 효과가 있다고 믿을 수 없었다!!


탭을 닫고 새 탭을 열어야합니까?
Zeb

1
) 그는 "한"하지 "하지 않았다"고 말했다
나단 JB

14
+1, 이것은 매우 귀중한 메모 입니다. 이 문장 앞에 <script>s 가 있으면 (IE = edge) 무시됩니다. <head>meta
jakub.g

22

IE를 IE9 표준 모드에서 강제로 렌더링하려면

<meta http-equiv="X-UA-Compatible" content="IE=edge">

일부 조건에서는 IE9가 호환 모드로 넘어갈 수 있습니다. 기본적으로 이것은 인트라넷 사이트에서 발생할 수 있습니다.


다른 웹 사이트에서 작동합니다. 그렇게해서는 안됩니다. 또한 새로운 IE 버전이있을 때마다 수동으로 업데이트해야하므로 메타 태그가 악의적입니다.
René

2
문제를 해결할 수 없습니다. 그러나 IE=edge대신 사용하도록 내 답변을 편집 하여 항상 사용 가능한 최신 엔진을 사용합니다.
Delan Azabani

귀하의 가정이 잘못되었습니다. 이 데모에서는 X-UA-Compatible을 지정하여 IE가 호환성보기 단추를 표시하지 않도록합니다. 사용자가이 단추를 누르면 사이트 내용이 제대로 작동하지 않기 때문입니다.
EricLaw

@ReneGeuze, 당신이 잘못했습니다. Edge는 항상 최신 버전의 IE를 나타냅니다.
neoswf

@DelanAzabani 인트라넷 포털이 호환 모드로 전환되어 제안한대로 메타 태그를 추가했습니다. IE 8, IE 8 호환성과 같은 표준 모드 예제를 어떻게 해결하고 유지할 수 있는지 제안하십시오 .IE 8 만 원합니다.
dsi

6

이 의견을 별도의 StackOverflow 스레드에 게시했지만 여기에서 반복 할 가치가 있다고 생각했습니다.

사내 ASP.Net 앱의 경우 웹 페이지, web.config 또는 코드 숨김에 "X-UA-Compatible"태그를 추가하면 아무런 차이가 없습니다.

우리에게 도움이 된 유일한 것은 IE8에서이 설정을 수동으로 해제하는 것입니다.

여기에 이미지 설명을 입력하십시오

(한숨.)

이 문제는 인트라넷 사이트의 IE8 및 IE9에서만 발생하는 것으로 보입니다. 외부 웹 사이트는 제대로 작동하고 올바른 버전의 IE8 / 9를 사용하지만 내부 웹 사이트의 경우 IE9가 갑자기 IE7인지 확인하고 HTML 5를 지원하지 않습니다.

아니요, 나는이 논리를 잘 이해하지 못합니다.

내 꺼리는 해결책은 브라우저가 HTML 5를 지원하는지 (캔버스를 만들고 유효 여부 를 테스트 하여) 지원하는지 테스트하고 유효하지 않은 경우 사용자 에게이 메시지를 표시하는 것입니다.

여기에 이미지 설명을 입력하십시오

특히 사용자에게 친숙하지는 않지만 사용자가이 성가신 설정을 끄도록하는 것이 사내 HTML 5 웹 앱을 제대로 실행할 수있는 유일한 방법 인 것 같습니다.

또는 사용자가 Chrome을 사용하도록합니다. ;-)


1

http://www.HTML-5.com/index.html 사이트 에는 X-UA 호환 메타 태그가 있지만 주소 표시 줄에 "찢어진 페이지"아이콘으로 표시되는대로 호환성보기로 이동합니다. IE 9 (최종 버전 9.0.8112.16421)가 표준 모드에서 페이지를 렌더링하도록하려면 메뉴 옵션을 어떻게 얻습니까? Rene Geuze가 언급 한 추가 메뉴 옵션을 표시하기 위해 찢어진 페이지 아이콘과 "Alt"키 트릭을 마우스 오른쪽 버튼으로 클릭했지만 작동하지 않았습니다.


4
메타 주변의 IE 조건부 주석을 제거하십시오. 페이지를 (으)로 제공 application/xhtml+xml하므로 XML 구문 분석 규칙이 사용됩니다. XML은 조건부 주석을 지원하지 않습니다. 어쨌든 그것은 의미가 없습니다. 브라우저는 해석 할 조건부 주석을 결정 하기 전에 모드 선택해야합니다 .
bobince

1

더 현대적인 웹 사이트를 제외하고 상용구에 따라 html 태그에 조건문을 사용하는 경우 어떤 이유로 ie9가 기본적으로 호환 모드로 설정됩니다. 여기서 수정 사항은 조건문을 html 태그 밖으로 옮기고 본문 태그, 즉 헤드 섹션 밖으로 추가하는 것입니다. 이렇게하면 스타일 시트에서 해당 클래스를 계속 사용하여 이전 브라우저를 대상으로 할 수 있습니다.


0

나에게 잘 보인다 :

대체 텍스트

전 세계 또는 다른 설정을 사용하지 않았다고 확신하십니까? 이것은 Windows 7에서 베타 버전을 새로 설치 한 것입니다. 개발자 도구는 페이지가 IE9 표준 모드로 기본 설정되어 있다고보고합니다.


이 오류에 대한 보고서가 두 개 이상있었습니다. 아마도 기본 디렉토리 ( alliancesatwar.com )와 관련이 있지만 모든 하위 디렉토리를 호환 모드로 렌더링합니다. 그러나 웹 사이트의 루트에서 IE가 웹 사이트를 호환 모드로 렌더링하게하는 질문은 무엇입니까? 적어도이 안내서는 올바르게 코딩되어있을 것입니다. 그때가 되길 바랍니다.
René

@Rene Strange는 홈페이지에서 가이드 링크를 클릭하여 방금 재현했습니다. 그러나 이것은 한 번만 일어 났으며 몇 번의 시도 후에도 이것을 재현하지 못했습니다. 한 번만
Yi Jiang

0

최근 에이 문제를 해결해야했고 여기에 내가 한 일이 있습니다.

우선,이 솔루션은 Apache 서버 튜닝에 관한 것입니다.

두 번째 주요 생각은 IE9에 버그가 있다는 것입니다. 즉,이 솔루션 대신 메타 태그가 작동하지 않습니다.

  • httpd.conf 찾기 / 열기
  • 주석을 해제하거나 다음 줄을 추가하십시오.

    LoadModule headers_module modules/mod_headers.so
  • 다음 줄을 추가하십시오

    <IfModule headers_module>
        Header set X-UA-Compatible: IE=EmulateIE8
    </IfModule>
  • Apache 서버를 저장 / 다시 시작하십시오.

  • IE9로 페이지를 탐색 하거나 wireshark 또는 fiddler 와 같은 도구를 사용하거나 IE 개발자 도구를 사용하여 헤더가 있는지 확인하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.