Устаревшие и удаленные API в Chrome 54

Почти в каждой версии Chrome мы видим значительное количество обновлений и улучшений продукта, его производительности, а также возможностей веб-платформы. В этой статье описаны устаревания и удаления в Chrome 54, бета-версия которого доступна с 15 сентября. Этот список может быть изменен в любое время.

Отключить навигацию в обработчике выгрузки

TL;DR: Все переходы между источниками будут запрещены в обработчиках событий window.onunload , чтобы интегрировать Chrome со спецификацией HTML, а также Firefox и Safari.

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Предыдущие версии Chrome позволяли прерывать навигацию между источниками внутри window.onunload . установив window.location.href = '#fragment' . Согласно спецификации HTML , в обработчиках выгрузки разрешена только внутристраничная навигация, а в предыдущих версиях Chrome другие методы навигации блокировались, как того требует спецификация. Начиная с Chrome 54, такая навигация будет запрещена, чтобы привести нас в соответствие со спецификацией, а также Firefox и Safari.

HTTP/0.9 устарел

TL;DR: HTTP/0.9 устарел. Разработчикам следует перейти на более позднюю версию, предпочтительно HTTP/2.

Намерение удалить | Трекер Chromestatus | Ошибка хрома

HTTP/0.9 является предшественником HTTP/1.x . Ему не хватает многих функций своих преемников. Особое беспокойство в современной сети вызывает отсутствие заголовков ответов. Без них невозможно проверить, что ответ HTTP/0.9 действительно является ответом HTTP/0.9. Это может вызвать несколько проблем. Примеры включают, среди прочих проблем:

  • Клиенты, которые рассматривают определенные ответы об ошибках как действительные ответы HTTP/0.9.
  • Серверы, которым не удается закрыть сокет запроса, заставляют клиентов рассматривать ответы как зависший GET, который либо остается активным вечно, либо до тех пор, пока пользователь не перейдет со страницы, сделавшей запрос.
  • Серверы, которые не могут указать браузеру, что запрос не выполнен, что может вызвать проблемы с эвристикой кэширования.

Единственный надежный способ исправить проблемы с HTTP/0.9 — полностью прекратить поддержку. Вот почему поддержка HTTP/0.9 удалена в Chrome 54.

Использование initTouchEvent удалено.

TL;DR : initTouchEvent устарел в пользу constructor TouchEvent для улучшения соответствия спецификациям и будет полностью удален в Chrome 54.

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Уже давно разработчики могут создавать синтетические события касания в Chrome с помощью API initTouchEvent . Они часто используются для имитации событий касания либо для тестирования, либо для автоматизации некоторых пользовательских интерфейсов на вашем сайте. Начиная с Chrome 49, этот устаревший API отображает следующее предупреждение.

Предупреждение о сенсорном событии
TouchEvent.initTouchEvent устарел и будет удален в M53 примерно в сентябре 2016 г. Вместо этого используйте конструктор TouchEvent . Дополнительную информацию см. на странице https://www.chromestatus.com/features/5730982598541312 .

Помимо того, что это изменение не включено в спецификацию Touch Events, есть ряд причин, по которым это изменение хорошо . Реализация initTouchEvent в Chrome вообще не была совместима с API-интерфейсом initTouchEvent в Safari и отличалась от Firefox на Android. И, наконец, конструктор TouchEvent намного проще в использовании.

По этим причинам мы решили следовать спецификации, а не поддерживать API, который не является ни спецификациями, ни совместимыми с единственной другой реализацией. Разработчикам, которым нужна альтернатива, следует использовать конструктор TouchEvent .

Поскольку реализации API initTouchEvent для 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» в User-Agent, и Chrome на Android будет соответствовать этому устаревшему значению. Однако его пока нельзя удалить, поскольку в течение некоторого времени на Android будут существовать другие браузеры на базе WebKit и более старые версии Blink, в которых вам все равно потребуется поддержка старого API.

Чтобы правильно обрабатывать TouchEvent в Интернете, вам следует изменить свой код для поддержки Firefox, IE Edge и Chrome, проверив наличие TouchEvent в объекте window и имеет ли он положительную «длину» (указав, что это конструктор, который принимает аргумент) вы должны использовать это.

    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 удален.

TL;DR: Малоподдерживаемое свойство keyboardEvent.keyIdentifier удаляется в пользу стандартного свойства KeyboardEvent.key .

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Атрибут keyboardEvent.keyIdentifier некоторое время был частью спецификации W3C в 2009 и 2010 годах. Однако он был реализован только в WebKit.

Разработчики, которым необходимо заменить этот атрибут, могут использовать либо стандартное свойство KeyboardEvent.key , либо свойство KeyboardEvent.code (как описано в статье, которую мы написали прошлой весной ). Первый имеет самую широкую базу реализации и поддерживается всеми основными настольными браузерами, кроме Safari. Последний вариант в настоящее время поддерживается в Chrome, Firefox и Opera. Удаление этой функции призвано стимулировать внедрение свойства KeyboardEvent.key . Apple пока не сообщает, будет ли это поддерживаться; однако также устаревшие (но еще не удаленные из Chrome) свойства KeyboardEvent.keyCode и KeyboardEvent.charCode по-прежнему доступны в Safari.

Удалить завершенное событие и атрибут MediaStream, а также атрибут onended.

TL;DR: ended событие и атрибут, а также обработчик событий onended удаляются, поскольку они были удалены из спецификации Media Capture и Streams .

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Ни ended событие, ни обработчик onended событий не были частью спецификации WebRTC вот уже около трёх лет. Разработчики, желающие отслеживать события, должны использовать MediaStreamTracks вместо MediaStreams .

Устаревший SVGSVGElement.viewPort

Реализация не работает в Chrome с 2012 года. Атрибут вообще отсутствует в других браузерах и удален из спецификации. По этим причинам имущество устаревает. Удаление ожидается в Chrome 55.

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Устаревший SVGViewElement.viewTarget

Атрибут SVGViewElement.viewTarget не является частью спецификации SVG2.0, и его использование невелико или вообще отсутствует. Этот атрибут устарел в Chrome 54. Ожидается его удаление в Chrome 56.

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Удалить SVGZoomEvent

SVGZoomEvent не является частью спецификации SVG2.0 и не работает в Chromium. Несмотря на это, его все еще можно обнаружить, что может привести к путанице разработчиков. Оно будет удалено.

Намерение удалить | Трекер Chromestatus | Ошибка хрома