읽기 전에:
기사의 구체적인 내용을 읽기 전에 먼저 IE8을 열고 http://www.taobao.com 을 연 다음 주소 표시줄에 다음을 입력하시기 바랍니다.
javascript:alert(document.documentMode +navigator.userAgent);void(0)
결과를 보고 놀라셨는지 모르겠습니다. 어쨌든 페이지 메타에 호환성 태그가 없고, fiddler 검사 시 http 헤더에 X-UA-Compatible 태그가 없기 때문에 매우 이상하다고 생각합니다. 도대체 웹사이트가 IE7 모드에서 실행되는 이유는 무엇입니까?
IE7 호환성 모드 및 호환성 보기
어제 입소문에서 적응력이 뛰어난 iframe 에 대한 기사를 읽었을 때 제공되는 데모가 IE8의 데모와 다르다는 것을 발견했습니다. 온라인 결과도 분명히 IETester7과 동일했습니다. 메타에 호환성 표시가 없는 경우 fiddler는 http 헤더에 X-UA 호환 표시가 없는지 확인하지만 온라인 결과가 로컬 결과와 다른 이유는 무엇입니까? 이것이 나를 우울하게 만들었습니다. 다시 살펴보니 온라인 데모에는 IE8에서 "호환성 보기" 버튼이 표시되지 않았습니다. 생각해보면 이것이 바로 이유인 것 같습니다.
나중에 Just The Facts: Recap of Compatibility View라는 기사를 찾았습니다. 비록 문제가 해결되지는 않았지만 내용은 좋았으므로 해당 내용 중 하나를 인용하고 싶습니다.
호환성 보기와 X-UA-Compatible 태그는 동일하지 않습니다.
호환성 보기는 클라이언트에서 수행하는 작업입니다. 이는 사용자 에이전트 문자열, 버전 벡터(조건부 주석 평가에 사용됨), 표준 매핑을 트리거하는 모드 DOCTYPE(IE8 표준 또는 IE7 표준)에 영향을 미칩니다. -UA-Compatible <META> 태그/헤더는 페이지 콘텐츠/서버측에서 사용하는 것이며, 존재할 경우 클라이언트의 호환성 보기 설정을 완전히 재정의합니다. 버전 벡터와 표준을 트리거하는 DOCTYPE 모드에 영향을 미칩니다. 이미 변경하기에는 너무 늦었으므로 UA 문자열에 영향을 미칠 수 없습니다. 클라이언트가 이미 서버에 GET 요청을 보냈고 여기에는 UA 문자열이 포함되어 있습니다. 이것이 개발자에게 의미하는 바는 사이트가 회전한다는 것입니다. 사용자 에이전트 문자열에 X-UA-Compatible 태그만 추가하면(IE8에서 사이트를 IE7 표준 모드로 표시하게 됨) 웹사이트가 호환되지 않습니다. 또한 사용자 에이전트 문자열 감지 논리를 다음과 같이 업데이트해야 합니다. 잘.
이는 호환성 보기가 세 가지 역할을 한다는 것을 의미합니다.
메타 태그는 1. 버전, 2. 문서 유형의 두 가지 역할만 수행합니다.
(여기서 메타 태그는 UserAgent에 영향을 미치지 않는다고 합니다. 서버 측의 ua를 참조해야 합니다. 클라이언트 요청이 전송되었고 ua가 포함되어 있으므로 영향을 받지 않습니다. 그러나 클라이언트의 ua는 여전히 입니다. 영향을 받아 ie7이 표시됩니다.)
옳은:
(이전 테스트가 잘못되었을 수도 있습니다.) 클라이언트의 ua는 영향을 받지 않으며 document.documentMode에만 영향을 미칩니다.
게다가:
<META> 태그/헤더는 각각 <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"> 및 .net 구성 파일과 같이 서버측에 http 헤더를 추가하는 것을 의미합니다.
또한 IIS 또는 Apache에 http 헤더를 추가할 수도 있습니다.
문제 해결
이 시점에서 기사 시작 부분의 문제는 여전히 해결되지 않았습니다. 어젯밤에 우연히 Qin Ge의 기사를 doctype을 사용하여 브라우저 모드 활성화하는 방법에 대해 언급했는데, Microsoft의 블랙리스트 사이트 목록에서도 호환 모드가 활성화될 것이라고 언급했습니다. 위의 두 댓글 중 하나는 res://iecompat.dll/iecompatdata.xml(IE8에만 해당)입니다. 이 주소를 IE8에 입력하면 다음과 같이 표시됩니다. 이 방법으로 최종적으로 도메인을 찾을 수 있습니다. 이 목록에는 Koubei 및 Taobao의 이름이 포함되어 있으므로 이 목록에서 도메인 이름을 찾아 열고 시작 부분에 자바스크립트를 입력할 수도 있습니다. 주소 표시줄의 기사(ps: Microsoft에는 목록이 너무 많습니다), 너무 많은 사이트를 IE7로 변환합니다.
<구성>
<시스템.웹서버>
<http프로토콜>
<커스텀헤더>
<지우기 />
<이름 추가="X-UA-Compatible" value="IE=EmulateIE7" />
</customHeaders>
</http프로토콜>
</system.webServer>
</구성>