2009-09-29 2 views

답변

3

빠른 Google search 결과 : "HOWTO determine the document's compatibility mode"

은 기본적으로 당신은 단지 쿼크 모드에서 작동 할 잘못된 CSS 스타일을 가진 div를 만들 수 있습니다. 그런 다음 새 div의 스타일을 확인하여 CSS가 승인되었는지 확인하십시오. 승인 된 경우, 문서는 단점 모드입니다.

var el = document.createElement('div'); 
el.style.cssText = 'position:absolute;width:0;height:0;width:1'; 
var compatMode = el.style.width === '1px' ? 'BackCompat' : 'CSS1Compat'; 

내가 당신을 위해 이것을 테스트 것입니다하지만 난 사파리를 실행할 수 없습니다 :

the code 의역합니다. 가능한 경우 테스트하여 의견에 결과를보고하십시오.

+0

Safari 3.0.x에서 완벽하게 작동합니다. –

+0

좋지 않습니다. 이 코드는 IE가 표준 모드에있을 때 IE에서 "BackCompat"을 발생시킵니다. – Garrett

+1

Google 기사에서는 브라우저 감지 및 확장 기능을 사용합니다. – Garrett

2

대부분의 최신 브라우저는 compatMode이지만 일부 구형 브라우저는 그렇지 않습니다. 이러한 브라우저에는 Mac IE와 이전 웹킷 (예 : 데스크톱의 Safari 2 및 많은 Nokia 전화)이 포함됩니다.

document.compatMode이있는 경우 값이 "BackCompat"이 아닌지 확인하십시오. 이 경우 문서는 표준 모드입니다. 이것은 IE에 대한 초기 결과를 얻습니다.

그렇지 않으면 document.compatMode이 없으므로 표준 모드 렌더링을 지원할 수있는 구형 브라우저이지만 compatMode 속성은 없습니다.

width의 숫자 값을 갖도록 요소를 설정하면 폭이 설정되므로 문서가 표준 모드가 아닙니다.

가독성이 높은 경우 if - else을 사용할 수 있습니다. 또는, 삼항식 할당을 사용하십시오.

 
/* 2010-06-26 Garrett Smith - BSD License */ 
function isQuirksMode(doc) { 
    doc = doc || document; 
    var compatMode = doc.compatMode, 
     testStyle, 
     IS_STANDARDS_MODE = compatMode ? compatMode != "BackCompat" : 
     doc.createElement && ((testStyle = doc.createElement("p").style).width = "1", 
     !testStyle.width); 
    return !IS_STANDARDS_MODE; 
} 

이 주소는 전세계 국가의 Nokias와 같은 모바일 장치에있을 수있는 이전 Webkit 버전을 처리합니다.

IE5.5 이하에서는 true를 반환합니다. 존재 추론 체크 createElement 깨진 createElement있는 브라우저에서 실패합니다 (오페라 5, 나는 믿습니다).

일반적인 추론을 위해이 함수를 사용하지 마십시오. 가능한 한 구체적으로하려고 노력하십시오.