IE 브라우저의 버전에 관계없이 항상 웹 표준과 다소 호환되지 않습니다. 코드 작업자에게는 CSS를 작성하든 JS를 작성하든 IE의 호환성 문제를 고려하기 위해 IE를 특별하게 취급하는 경우가 많으므로 판단이 필요합니다. 이 기사에서는 IE의 스타일을 구별하는 방법을 논의하지 않으며 JS만이 IE 브라우저를 결정합니다.
IE 브라우저를 결정하는 세계에서 가장 짧은 Javascript 방법은 러시아에서 나왔습니다! 다양한 버전의 IE 및 현재 널리 사용되는 기타 브라우저에서 테스트되었습니다. Microsoft는 IE 기반 버그를 알고 있었지만 이를 수정한 적이 없습니다.
<스크립트 유형='텍스트/자바스크립트'> var 즉 = !-[1,]; 경고(즉); </script> |
위 코드 실행 결과: IE에서는 true를 반환하고, 다른 표준 브라우저에서는 false를 반환합니다. !-[1,], 단 6바이트입니다!
그러나 판단이 뒤집혀 표준 브라우저가 true를 반환하고 IE가 false를 반환하는 경우에는 1바이트만큼 단축될 수 있습니다.
<스크립트 유형='텍스트/자바스크립트'> 아니오 = -[1,]; if(-[1,]){ // 표준 브라우저 코드 }또 다른{ // IE 전용 코드 } </script> |
이 글을 읽은 후, 이것이 어떻게 작동하는지 궁금하십니까? 아래를 계속 읽어주세요.
이 버그는 IE가 전체 배열 요소 수에 빈 배열 요소를 추가하기 때문에 발생합니다.
[1,] 길이 표준 브라우저는 1을 반환합니다(표준 ECMAscript를 기반으로 배열 끝에 있는 쉼표 ","는 무시됩니다. 이는 열 표시 및 자동 생성 등을 용이하게 하기 위한 것입니다). 2를 반환합니다. 이 배열을 인쇄하면 IE는 두 요소인 "1,"을 반환하는 반면 다른 표준 브라우저는 "1"을 반환합니다.
이는 IE 및 FF에서 다음 코드를 실행하여 쉽게 확인할 수 있습니다.
<스크립트 유형='텍스트/자바스크립트'> 경고([,]==','); //IE를 결정하는 8자입니다. </script> |
[1,] 실제로 브라우저의 작업은 문자열을 문자열로 변환하는 toString()이고, -[1,]은 문자열을 숫자로 변환하는 것입니다. IE는 NaN을 반환하지만 불행하게도 NaN은 숫자가 아닙니다. 왜냐하면 [1,] 뒤의 "1"이 문자열로 변환되면 쉼표가 포함되기 때문입니다. 다른 표준 브라우저는 0이 아닌 숫자인 -1을 반환합니다.
NaN을 부울로 변환하면 false가 반환되므로 -[1,]은 IE에서 false를 반환합니다. 부울 유형(예: -1)으로 변환된 0이 아닌 숫자는 표준 브라우저에서 true를 반환합니다. 그래서 우리는 판단 결과를 얻습니다. !-[1,]은 IE에서는 true를 반환하지만 다른 표준 브라우저에서는 false를 반환합니다. 이는 IE 브라우저를 구별하고 판단하는 목적도 달성합니다.
물론 앞서 언급한 것처럼 마이크로소프트는 실제로 이 버그에 대해 오랫동안 알고 있었지만 아직 고치지 않았기 때문에 앞으로도 > IE8 IE 브라우저는 여전히 작동할지 확신할 수 없지만 기본적으로 그렇게 많은 세대가 지나고 나면 IE는 아직 복구되지 않았으며 앞으로 IE가 복구될 가능성도 없습니다.
다음은 IE 브라우저를 구별하고 판단하기 위한 몇 가지 다른 코드입니다. 다음을 참조할 수도 있습니다.
<스크립트 유형='텍스트/자바스크립트'> // Dean Edwards의 옵션: var 즉 = /*@cc_on!@*/false; // 주석 처리된 라인을 사용합니다: var 즉//@cc_on=1; // 변형(더 짧은 변수): var 즉 = 'v'=='v'; // Gareth Hayes(전 기록 보유자)에 대한 옵션: var 즉 = !+"v1"; </script> |