>웹 프론트엔드 >JS 튜토리얼 >Internet Explorer 11 브라우저 소개: Don't call me IE

Internet Explorer 11 브라우저 소개: Don't call me IE

PHPz
PHPz앞으로
2016-05-16 16:35:052851검색

이 글은 주로 Internet Explorer 11 브라우저 소개를 소개합니다: IE라고 부르지 마세요, 도움이 필요한 친구들이 참고할 수 있습니다.

지난주 Microsoft는 Windows 8.1을 사용하는 Internet Explorer 11의 첫 번째 미리보기 버전을 공식 출시했습니다. 이제 논란의 여지가 있는 이 웹 브라우저의 유출된 버전에 대한 다양한 소문을 잠재워야 할 때입니다. 이제 우리는 WebGL, 프리페치, 프리렌더, 플렉스박스, 돌연변이 관찰자 및 기타 웹 표준에 대한 지원을 포함하여 Internet Explorer 11에 대한 몇 가지 중요한 세부 정보를 알고 있습니다. 아마도 IE11에서 더 흥미로운 점은 이것이 IE가 아니라는 것입니다.

Microsoft는 오랜만에 Internet Explorer 브라우저에서 일부 기능을 제거했습니다. 사용자 에이전트 문자열도 변경되었습니다. Microsoft는 IE를 감지하는 기존 코드 분기가 javascript에서든 서버에서든 Internet Explorer 11 브라우저에서 false를 반환하도록 자체 접근 방식을 포기한 것 같습니다.

사용자 에이전트 변경

이전 버전과 비교하여 Internet Explorer 11의 사용자 에이전트 문자열은 더 짧고 몇 가지 흥미로운 변경 사항이 있습니다.

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko

Windows 7의 Internet Explorer 10 사용자 에이전트 문자열

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)

가장 분명한 차이점은 항상 "MSIE Internet Explorer 사용자 에이전트 문자열에 있는 " 태그가 제거되었습니다. 또한 user-agent 끝에 "like Gecko"가 추가된 것도 눈에 띕니다. 이는 Internet Explorer가 Internet Explorer 자체보다는 Gecko 브라우저로 식별되는 것이 더 낫다는 것을 의미합니다. Safari는 누구나 사용자 에이전트 문자열에서 "Gecko" 문자를 스니핑하고 브라우저가 통과할 수 있도록 "like Gecko"를 추가한 최초의 브라우저였습니다.

이제 "MSIE"를 찾는 스니핑 코드는 새로운 사용자 에이전트 문자열에서 작동하지 않습니다. IE인지 확인하기 위해 "Trident" 문자를 계속 검색할 수 있습니다("Trident" 로고는 Internet Explorer에서 도입되었습니다). Internet Explorer의 실제 버전은 "rv"로 식별됩니다.

또한 navigator 객체의 정보도 변경되어 사용 중인 브라우저가 더욱 숨겨졌습니다.

navigator.appName은 "Netscape"로 설정됩니다.
navigator.product는 "Gecko"로 설정됩니다.

이는 개발자를 속이려는 교활한 시도처럼 보일 수 있지만 실제로는 HTML5로 지정되었습니다. . navigator.product 속성은 "Gecko"여야 하며 navigator.appName도 "Netscape" 이상이어야 합니다. 그러나 Internet Explorer 11은 이 이상한 조언을 따르지 않습니다.

네비게이터 정보 변경의 부작용으로 사용 중인 Javascript 로직 기반의 브라우저 감지가 불가능하여 Internet Explorer 11이 Gecko 기반 브라우저로 인식될 수 있습니다.

document.all과 그의 친구들

IE4 이후 document.all은 IE 브라우저에서 만능입니다. 이전에 구현된 document.getElementById()와 유사하게 document.all은 DOM 요소에 대한 참조를 가져오는 IE 메서드입니다. IE5에서 IE10까지 document.all은 DOM에 대한 지원을 유지합니다. 그러나 11에서는 이 시대의 레거시가 false를 반환하도록 설정되었습니다. 즉, 코드가 실제로 document.all을 사용하고 정상적으로 작동하더라도 document.all을 기반으로 한 모든 코드 분기 판단은 IE11에서 실패한다는 의미입니다.

또 다른 유산은 detachEvent() 메서드와 유사하게 이벤트 함수의 attachmentEvent()를 추가하는 것입니다. 이 메서드는 IE11에서 제거되었습니다. 이러한 메서드는 다음과 같은 일부 논리적 판단을 피하기 위해 제거되었습니다.

function addEvent(element, type, handler) {
    if (element.attachEvent) {
        element.attachEvent("on" + type, handler);
    } else if (element.addEventListener) {
        element.addEventListener(type, handler, false);
    }
}

물론 테스트하기에 가장 적합한 버전은 항상 안정적이고 표준을 충족하는 버전인 것이 좋습니다. 어떤 수준에서는 AttachEvent 메소드를 제거해도 불편함이 발생하지 않습니다. 그러나 인터넷은 열악한 기능 감지 논리 코드로 가득 차 있습니다. AttachEvent 메소드를 제거하면 위 방식으로 작성된 모든 코드가 IE 특정 메소드 대신 표준 버전을 사용하게 됩니다.

일부 제거된 기능:

window.execScript() - eval() 메서드의 IE 버전

window.doScroll() - 창의 IE 버전 스크롤 메소드

script.onreadystatechange - IE에서 로드된 스크립트의 상태 변화를 모니터링

script.readyState - IE에서 스크립트 로딩 상태

document.selection - IE

document.createStyleSheet에서 현재 선택한 텍스트 - IE에서 스타일 시트 문서 만들기

style.styleSheet - IE 브라우저에서 스타일 시트를 참조하는 스타일 개체


이러한 모든 IE 브라우저 방식은 표준 기능으로 대체되었습니다. 이러한 기능과 메서드를 제거한 후에도 표준 기능 감지를 기반으로 하는 크로스 브라우저 코드는 변경 없이 계속 정상적으로 실행될 수 있습니다.

결론

오랫동안 IE11은 최고의 IE 브라우저가 될 수 있습니다. Microsoft는 마침내 과거의 실수를 되돌릴 준비를 하고 있으며 오늘날의 표준을 기반으로 하는 브라우저를 포함하기 시작했습니다. IE에서 인식하지 못하는 오래된 기능을 제거하고 사용자 에이전트 문자열을 수정하는 것은 모든 사이트가 계속 작동하도록 보장하는 고유한 접근 방식입니다. 웹 애플리케이션이 브라우저 스니핑 대신 기능 감지를 사용하는 경우 코드는 IE11에서 실행되어야 합니다. 사용자 에이전트 스니핑을 사용하는 애플리케이션의 경우 IE11은 탁월한 표준 지원을 제공하므로 사용자는 여전히 완전한 기능을 갖춘 웹 사이트를 볼 수 있습니다.

IE 브랜치코드가 없는 미래가 곧 다가온다. 우리 함께 기대해 보자.

(2013-7-2 업데이트) 개정판에 언급된 document.all이 실제로 삭제된 것이 아니라 허위로 변경되었습니다

위 내용이 이 장의 전체 내용입니다. 더 많은 관련 튜토리얼을 보려면 JavaScript 비디오 튜토리얼을 방문하세요!

성명:
이 기사는 human에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제