Chrome 54의 API 지원 중단 및 삭제

거의 모든 버전의 Chrome에서 제품, 성능 및 웹 플랫폼의 기능에 대한 수많은 업데이트와 개선 사항이 확인됩니다. 이 도움말에서는 9월 15일 현재 베타 버전인 Chrome 54의 지원 중단 및 삭제에 관해 설명합니다. 이 목록은 언제든지 변경될 수 있습니다.

로드 취소 핸들러에서 탐색 사용 중지

요약: Firefox 및 Safari뿐만 아니라 HTML 사양에 맞게 Chrome을 인라인하기 위해 window.onunload 이벤트 핸들러에서 모든 교차 출처 탐색이 허용되지 않습니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

이전 버전의 Chrome에서는 window.onunload 내에서 교차 출처 탐색이 중단될 수 있었습니다. window.location.href = '#fragment'를 설정하여 HTML 사양에 따르면 로드 취소 핸들러에서는 인페이지 탐색만 허용되며, 이전 버전의 Chrome에서는 사양에 따라 다른 탐색 방법이 차단되었습니다. Chrome 54부터는 이러한 탐색이 사양과 일치하도록 하기 위해 Firefox, Safari를 사용하는 것이 허용되지 않습니다.

HTTP/0.9 지원 중단됨

요약: HTTP/0.9는 지원 중단되었습니다. 개발자는 최신 버전(가급적이면 HTTP/2)으로 이동해야 합니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

HTTP/0.9는 HTTP/1.x의 이전 버전입니다. 뒤이어 있는 제품의 많은 기능이 없습니다. 최신 웹에서는 응답 헤더가 없다는 점이 특히 우려됩니다. 이들이 없으면 HTTP/0.9 응답이 실제로 HTTP/0.9 응답인지 확인할 방법이 없습니다. 이로 인해 여러 문제가 발생할 수 있습니다. 예를 들면 다음과 같은 문제가 있습니다.

  • 특정 오류 응답을 유효한 HTTP/0.9 응답으로 처리하는 클라이언트
  • 서버가 요청 소켓을 닫지 못하게 하여 클라이언트가 응답을 중단된 GET으로 취급하게 하는데, 이는 사용자가 요청을 보낸 페이지에서 이동할 때까지 또는 영원히 유지되는 GET입니다.
  • 서버에 요청이 실패했음을 알 수 없어 캐싱 휴리스틱에 문제가 발생할 수 있습니다.

HTTP/0.9 관련 문제를 해결할 수 있는 유일한 방법은 지원을 완전히 삭제하는 것입니다. 그렇기 때문에 Chrome 54에서 HTTP/0.9 지원이 삭제되었습니다.

initTouchEvent 사용이 삭제되었습니다.

요약: initTouchEvent는 사양 규정 준수를 개선하기 위해 지원 중단되고 TouchEvent constructor로 대체되었으며 Chrome 54에서 완전히 삭제될 예정입니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

오랫동안 개발자는 initTouchEvent API를 사용하여 Chrome에서 합성 터치 이벤트를 만들 수 있었습니다. 이는 사이트의 일부 UI를 테스트하거나 자동화하기 위해 터치 이벤트를 시뮬레이션하는 데 자주 사용됩니다. Chrome 49부터 지원 중단된 이 API에 다음과 같은 경고가 표시되었습니다 .

터치 이벤트 경고
TouchEvent.initTouchEvent는 지원 중단되었으며 2016년 9월경 M53에서 삭제될 예정입니다. 대신 TouchEvent 생성자를 사용하세요. 자세한 내용은 https://www.chromestatus.com/features/5730982598541312를 참고하세요.

터치 이벤트 사양에 포함되지 않은 것 외에도 이 변경사항이 도움이 되는 이유는 여러 가지가 있습니다. initTouchEvent의 Chrome 구현은 Safari의 initTouchEvent API와 전혀 호환되지 않았으며 Android의 Firefox와 달랐습니다. 마지막으로 TouchEvent 생성자가 훨씬 사용하기 쉽습니다.

이러한 이유로 Google은 사양이 지정되지 않았거나 다른 구현과 호환되지 않는 API를 유지 관리하는 대신 사양을 따르기로 결정했습니다. 대안이 필요한 개발자는 TouchEvent 생성자를 사용해야 합니다.

initTouchEvent API의 iOS와 Android/Chrome 구현은 매우 다르므로 사이트에서 코드가 있는 경우가 많았습니다(Firefox를 잊어버리는 경우가 많음).

    var event = document.createEvent('TouchEvent');
    
    if(ua === 'Android') {
      event.initTouchEvent(touchItem, touchItem, touchItem, "touchstart", window,
        300, 300, 200, 200, false, false, false, false);
    } else {
      event.initTouchEvent("touchstart", false, false, window, 0, 300, 300, 200,
        200, false, false, false, false, touches, targetTouches, changedTouches, 0, 0);
    }
    
    document.body.dispatchEvent(touchEvent);

사용자 에이전트에서 'Android'를 찾으면 Android의 Chrome이 이에 일치하여 이번 지원 중단이 발생하기 때문에 이는 좋지 않습니다. 하지만 당분간은 이전 API를 계속 지원해야 하는 다른 WebKit 및 이전 Blink 기반 브라우저가 Android에 포함될 예정이므로 아직 삭제할 수는 없습니다.

웹에서 TouchEvent을 올바르게 처리하려면 window 객체에 TouchEvent가 있는지 확인하여 Firefox, IE Edge, Chrome을 지원하도록 코드를 변경해야 하며, '길이'가 양수인 경우(인수를 받는 생성자를 나타냄) 이를 사용해야 합니다.

    if('TouchEvent' in window && TouchEvent.length > 0) {
      var touch = new Touch({
        identifier: 42,
        target: document.body,
        clientX: 200,
        clientY: 200,
        screenX: 300,
        screenY: 300,
        pageX: 200,
        pageY: 200,
        radiusX: 5,
        radiusY: 5
      });
    
      event = new TouchEvent("touchstart", {
        cancelable: true,
        bubbles: true,
        touches: [touch],
        targetTouches: [touch],
        changedTouches: [touch]
      });
    }
    else {
      event = document.createEvent('TouchEvent');
    
      if(ua === 'Android') {
        event.initTouchEvent(touchItem, touchItem, touchItem, "touchstart", window,
          300, 300, 200, 200, false, false, false, false);
      } else {
        event.initTouchEvent("touchstart", false, false, window, 0, 300, 300, 200,
          200, false, false, false, false, touches, targetTouches, 
          changedTouches, 0, 0);
      }
    }
    
    document.body.dispatchEvent(touchEvent);

KeyboardEvent.keyIdentifier 속성이 삭제됨

요약: 거의 지원되지 않는 keyboardEvent.keyIdentifier 속성이 삭제되고 표준 기반 KeyboardEvent.key 속성으로 대체됩니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

keyboardEvent.keyIdentifier 속성은 2009년과 2010년에 간략하게 W3C 사양에 포함되었습니다. 하지만 WebKit에서만 구현되었습니다.

이 속성을 대체해야 하는 개발자는 표준 기반 KeyboardEvent.key 속성 또는 KeyboardEvent.code 속성을 사용하면 됩니다 (지난 봄에 작성한 도움말에 설명되어 있음). 전자는 Safari를 제외한 모든 주요 데스크톱 브라우저에서 지원되는 가장 광범위한 구현 기반을 보유하고 있습니다. 최신 버전은 현재 Chrome, Firefox, Opera를 지원합니다. 이 기능을 삭제하면 KeyboardEvent.key 속성의 채택을 촉진할 수 있습니다. Apple에서는 이 속성을 지원할지에 대한 장담을 받지 못했습니다. 그러나 지원 중단된 (그러나 아직 Chrome에서 삭제되지는 않음) KeyboardEvent.keyCodeKeyboardEvent.charCode 속성은 Safari에서 계속 사용할 수 있습니다.

MediaStream 종료 이벤트, 속성 및 onended 속성 제거

요약: ended 이벤트와 속성, onended 이벤트 핸들러가 미디어 캡처 및 스트림 사양에서 삭제되어 삭제되었습니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

ended 이벤트 및 onended 이벤트 핸들러는 약 3년 동안 WebRTC 사양에 포함되지 않았습니다. 이벤트를 보려는 개발자는 MediaStreams 대신 MediaStreamTracks를 사용해야 합니다.

SVGSVGElement.viewPort 지원 중단

2012년 이후 Chrome에서 이 구현이 작동하지 않았습니다. 이 속성은 다른 브라우저에는 전혀 표시되지 않으며 사양에서 삭제되었습니다. 이러한 이유로 이 속성은 지원 중단됩니다. Chrome 55에서 삭제될 예정입니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

SVGViewElement.viewTarget 지원 중단

SVGViewElement.viewTarget 속성은 SVG2.0 사양에 속하지 않으며 사용법이 적거나 존재하지 않습니다. 이 속성은 Chrome 54에서 지원 중단됩니다. Chrome 56에서 삭제될 예정입니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

SVGZoomEvent 삭제

SVGZoomEvent는 SVG2.0 사양에 속하지 않으며 Chromium에서 작동하지 않습니다. 하지만 여전히 기능을 감지할 수 있으므로 개발자에게 혼란을 초래할 수 있습니다. 해당 콘텐츠는 삭제됩니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그