[javascript] JavaScript : IE7 또는 IE8 호환 모드 인 경우 IE9를 감지 할 수 있습니까?

사용자 에이전트 문자열을 통해 IE7 또는 IE8로 식별되는 브라우저가 실제로 해당 브라우저인지 아니면 7 또는 8 호환성 모드의 IE9인지 알아야합니다.

사용자 에이전트 문자열에서 볼 수 있듯이 IE7 호환 모드의 IE9는 실제 IE7과 동일한 문자열을 제공합니다. 위장 된 “정말”IE9인지 테스트 할 수있는 추가 속성 / 요소 / 객체가 있습니까?

내 스크립트가로드 된 페이지가 특수한 설정을 강요하거나 특정 설정을 강요 할 수 있으므로 문서 모드가 도움이되지 않는다고 가정합니다.

IE9가 7, 8 또는 9 모드에 관계없이 존재하고 테스트 할 수있는 속성을 갖기를 바랍니다.


추가하기 위해 수정…

좋아, 이제 내가 어디로 잘못 가고 있는지 알 수 있습니다. “브라우저 모드”드롭 다운을 사용하여 IE8과 IE7로 전환하고 이것이 각각 “IE8 호환 모드”와 “IE7 호환 모드”라고 생각했습니다. 물론 이것은 사실이 아닙니다. 개발자 도구의 브라우저 모드는 실제로 이전 브라우저와 “같이되도록”전환하므로 원래 사용자 에이전트 문자열이보고되는 것이 옳습니다.

브라우저 모드를 IE9 또는 IE9 호환성 상태로두고 대신 문서 모드 드롭 다운 변형을 시도하면 실제로 “Trident / 5.0″이 8 가지 조합 (2 개의 브라우저 모드 및 4 개의 문서 모드)에 표시됩니다. IE7과 IE8은 실제로 (시뮬레이션 된) IE7과 IE8이기 때문에 브라우저 모드 IE7과 IE8을 선택하지 않아도됩니다.

따라서 페이지, 개발자가 아닌 사용자, 메타 태그 또는 Microsoft의 호환성 목록이 IE9를 식별 ​​할 수없는 상태로 만들 수있는 방법은 없습니다.

사용 if(navigator.userAgent.indexOf("Trident/5")>-1)만으로 충분합니다.

걱정하지 마세요. 스타일, 서식, 논리 또는 페이지 콘텐츠가 아닙니다. 나는 이러한 것들을 위해 기능 감지를 사용합니다. IE9를 감지하고 (어떤 모드에 있든 관계없이) 페이지가 아닌 콘텐츠 결정을 내리면됩니다.

귀하의 제안과 링크를 통해 답변을 이끌어 주셔서 감사합니다.



답변

실제로 IE7 호환 모드에서 실행될 때 IE9의 사용자 에이전트 문자열은 다르기 때문에 다른 IE 버전을 구별하는 가장 좋은 방법 중 하나입니다.

IE9의 사용자 에이전트 문자열 소개 :

IE8과 유사하게 IE9의 호환성보기는 IE7 표준 모드에 매핑되며 호환성보기에서 IE9의 UA 문자열은 다음과 같습니다.

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)

호환성보기에서 IE9는 애플리케이션 버전 번호 (Mozilla / 4.0) 및 버전 토큰 (MSIE 7.0)을 통해 자신을 IE7로보고합니다. 이것은 호환성을 위해 수행됩니다. ‘Trident / 4.0’에서 ‘Trident / 5.0’까지 증분 된 Trident 토큰을 사용하면 웹 사이트에서 Compat View에서 실행되는 IE9와 Compat View에서 실행되는 IE8을 구분할 수 있습니다 .

(내가 강조 추가). 따라서 사용자 에이전트 문자열은 자체적으로 “Mozilla / 4.0″및 MSIE 7.0이라고보고하는 것과 동일하지만 IE9는 MSIE 7.0, MSIE 8.0 또는 MSIE 9.0인지에 관계없이 항상 Trident / 5.0입니다.

실제로이 훌륭한 컴파일을 확인해야합니다 : 브라우저 ID (사용자 에이전트) 문자열 또는 더 나은 useragentstrings.com


답변

document.documentMode 문서 모드에 가장 적합한 방법입니다.


답변

IE7에는 Trident에 대한 정보가 없습니다.

User-Agent : Mozilla/4.0 (compatible; MSIE 7.0)

IE8에는 “Trident / 4.0″문자열이 포함됩니다.

User-Agent : Mozilla/4.0 (compatible; MSIE 8.0; Trident/4.0)

IE9에는 “Trident / 5.0″문자열이 포함됩니다.

호환성 모드의 IE9 :

User-Agent : Mozilla/4.0 (compatible; MSIE 7.0; Trident/5.0)

일반 모드의 IE9 :

User-Agent : Mozilla/5.0 (compatible; MSIE 9.0; Trident/5.0)


답변


답변

IE9가 7, 8 또는 9 모드에 관계없이 존재하고 테스트 할 수있는 속성을 갖기를 바랍니다.

예를 들어 style.opacity를 확인하십시오 . IE9에서 도입되었으며 호환성 모드에 관계없이 사용할 수 있습니다.

<![if IE]>
<script>
if(typeof document.documentElement.style.opacity!='undefined')
{
  //this must be at least IE9 
}
</script>
<![endif]>


답변

때때로 javascript navigator 객체가 아닌 서버 변수에서 사용자 에이전트 문자열을 읽어야합니다.

차이점을 비교하십시오.

  • ASP 클래식, IE11

    • 클라이언트 javascript, navigator.userAgent : ” Mozilla / 5.0 (호환 가능, MSIE 9.0, Windows NT 6.1, WOW64, Trident / 7.0, SLCC2, .NET CLR 2.0.50727, .NET CLR 3.5.30729, .NET CLR 3.0.30729, Media Center PC 6.0, .NET4.0C, .NET4.0E, BOIE9, ENUS)

    • 서버 ASP, Request.ServerVariables ( “HTTP_USER_AGENT”) : ” Mozilla / 5.0 (Windows NT 6.1; WOW64; Trident / 7.0; BOIE9; ENUS; rv : 11.0) like Gecko

  • ASP 클래식, IE11 호환 모드 :

    • 클라이언트 javascript, navigator.userAgent : ” Mozilla / 5.0 (호환 가능, MSIE 9.0, Windows NT 6.1, WOW64, Trident / 7.0, SLCC2, .NET CLR 2.0.50727, .NET CLR 3.5.30729, .NET CLR 3.0.30729, Media Center PC 6.0; .NET4.0C; .NET4.0E; BOIE9; ENUS))

    • 서버 ASP, Request.ServerVariables ( “HTTP_USER_AGENT”) : ” Mozilla / 4.0 (호환 가능, MSIE 7.0, Windows NT 6.1, WOW64, Trident / 7.0, SLCC2, .NET CLR 2.0.50727, .NET CLR 3.5.30729, .NET) CLR 3.0.30729, Media Center PC 6.0, .NET4.0C, .NET4.0E, BOIE9, ENUS)


답변

에서 https://stackoverflow.com/a/29288153/2879498

ID가 compat-warning 인 숨겨진 요소가 있다고 가정합니다.

jQuery가있는 자바 스크립트 :

$(function(){
    function showCompatWarning() {
        $('#compat-warning')
            .css('display','block')
            .css('height','auto')
            .show();
    }
    var tridentOffset = navigator.appVersion.indexOf('Trident/');
    if ( tridentOffset === -1 ) return;
    var jscriptVersion = 0;
    /*@cc_on @*/
    /*@if (@_jscript) jscriptVersion = @_jscript_version ; @*/;
    /*@end @*/
    var tridentVersion = parseInt(navigator.appVersion.substr(tridentOffset+8),10);
    var guessIEVersion = tridentVersion + 4;
    if (( document.documentMode && jscriptVersion && jscriptVersion < 10 && jscriptVersion !== document.documentMode ) ||
        ( document.compatMode && document.compatMode === 'BackCompat') ||
        ( document.documentMode && document.documentMode < 10 && document.documentMode != guessIEVersion ))
        showCompatWarning();
});

탐지 및 경고, 호환성 지옥에 대한 첫 번째 및 마지막 방어선.