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

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

В Chrome 50 (Предполагаемая дата бета-тестирования: 10–17 марта) есть ряд изменений в Chrome. Этот список может быть изменен в любое время.

AppCache устарел в небезопасных контекстах

TL;DR : Чтобы воспрепятствовать межсайтовому скриптингу, мы прекращаем поддержку AppCache на небезопасных источниках. Мы ожидаем, что в Chrome 52 он будет работать только на источниках, обслуживающих контент по HTTPS.

Намерение удалить | Chromestatus Tracker | Ошибка Chromium

AppCache — это функция, которая обеспечивает автономный и постоянный доступ к источнику, что является мощным повышением привилегий для атаки с использованием межсайтового скриптинга. В рамках более масштабных усилий по удалению мощных функций из небезопасных источников .

Chrome устраняет этот вектор атаки, разрешая его только через HTTPS. Мы прекращаем поддержку HTTP в Chrome 50 и рассчитываем полностью удалить ее в Chrome 52.

Document.defaultCharset удален

TL;DR : document.defaultCharset был удален для улучшения соответствия спецификации.

Намерение удалить | Chromestatus Tracker | Проблема CRBug

document.defaultCharset , устарело в Chrome 49, является свойством только для чтения, которое возвращает кодировку символов по умолчанию системы пользователя на основе его региональных настроек. Было обнаружено, что сохранять это значение бесполезно из-за способа, которым браузеры используют информацию о кодировке символов в HTTP-ответе или в метатеге, встроенном в страницу.

Вместо этого используйте document.characterSet , чтобы получить первое значение, указанное в заголовке HTTP. Если его нет, то вы получите значение, указанное в атрибуте charset элемента <meta> (например, <meta charset="utf-8"> ). Наконец, если ни один из них недоступен, document.characterSet будет системной настройкой пользователя.

Вы можете прочитать больше обсуждений причин не указывать это в спецификации в этой проблеме на github

TL;DR : Удалить поддержку значения subresource для атрибута rel HTMLLinkElement .

Намерение удалить | Chromestatus Tracker | Ошибка Chromium

Целью атрибута subresource в <link> было предварительное извлечение ресурса во время простоя браузера. После того, как браузер загрузил страницу, он мог предварительно загрузить ресурсы, такие как другие страницы, чтобы, когда они были запрошены пользователями, их можно было просто извлечь из кэша браузера.

Атрибут subresource страдал от ряда проблем. Во-первых, он никогда не работал так, как предполагалось. Ссылочные ресурсы загружались с низким приоритетом. Атрибут никогда не был реализован ни в одном браузере, кроме Chrome. Реализация Chrome содержала ошибку, из-за которой ресурсы загружались дважды.

Разработчики, желающие улучшить пользовательский опыт с помощью предварительной загрузки контента, имеют ряд опций, наиболее настраиваемая из которых — создание service worker для использования преимуществ предварительного кэширования и API Caches. Дополнительные решения включают другие значения для атрибута rel , включая preconnect , prefetch , preload , prerender . Некоторые из этих опций являются экспериментальными и могут не поддерживаться широко.

Удалить небезопасную резервную версию TLS

TL;DR : Удалить механизм, принуждающий серверы возвращать данные с использованием менее безопасных или небезопасных версий TLS.

Намерение удалить | Chromestatus Tracker | Ошибка Chromium

Безопасность транспортного уровня (TLS) поддерживает механизм согласования версий, что позволяет вводить новые версии TLS без нарушения совместимости. Некоторые серверы реализовали это таким образом, что браузеры были обязаны использовать небезопасные конечные точки в качестве резерва. Из-за этого злоумышленники могли заставить любой веб-сайт, а не только те, которые были неправильно настроены, согласовывать более слабые версии TLS.

Затронутые сайты не смогут подключиться с ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION . Администраторы должны убедиться, что их серверное программное обеспечение обновлено. Если проблема все еще не решена, свяжитесь с поставщиком серверного программного обеспечения, чтобы узнать, доступно ли исправление.

Удалить KeyboardEvent.prototype.keyLocation

TL;DR : Удалите ненужный псевдоним для атрибута Keyboard.prototype.location .

Намерение удалить | Chromestatus Tracker | Ошибка Chromium

Этот атрибут — просто псевдоним атрибута Keyboard.prototype.location , который позволяет устранить неоднозначность между клавишами, расположенными в нескольких местах на клавиатуре. Например, оба атрибута позволяют разработчикам различать две клавиши Enter на расширенной клавиатуре.

Обработчики ошибок и успешного завершения, необходимые в методах RTCPeerConnection

TL;DR : Методы WebRTC RTCPeerConnection createOffer() и createAnswer() теперь требуют обработчика ошибок, а также обработчика успеха. Ранее можно было вызывать эти методы только с обработчиком успеха. Такое использование устарело.

Намерение удалить | Chromestatus Tracker | Ошибка Chromium

В Chrome 49мы добавили предупреждение, если вы вызываете setLocalDescription() или setRemoteDescription() без предоставления обработчика ошибок. Аргумент обработчика ошибок является обязательным, начиная с Chrome 50.

Это часть работы по расчистке пути для внедрения обещаний в этих методах, как того требует спецификация WebRTC .

Вот пример из демо-версии WebRTC RTCPeerConnection ( main.js, строка 126 ):

    function onCreateOfferSuccess(desc) {
      pc1.setLocalDescription(desc, function() {
         onSetLocalSuccess(pc1);
      }, onSetSessionDescriptionError);
      pc2.setRemoteDescription(desc, function() {
        onSetRemoteSuccess(pc2);
      }, onSetSessionDescriptionError);
      pc2.createAnswer(onCreateAnswerSuccess, onCreateSessionDescriptionError);
    }

Обратите внимание, что и setLocalDescription() , и setRemoteDescription() имеют обработчик ошибок. Старые браузеры, ожидающие только обработчик успеха, просто проигнорируют аргумент обработчика ошибок, если он присутствует; вызов этого кода в старом браузере не вызовет исключения.

В целом, для производственных приложений WebRTC мы рекомендуем использовать adapter.js — оболочку, поддерживаемую проектом WebRTC, чтобы изолировать приложения от изменений спецификаций и различий префиксов.

XMLHttpRequestProgressEvent больше не поддерживается.

TL;DR : Интерфейс XMLHttpRequestProgressEvent будет удален вместе с атрибутами position и totalSize .

Намерение удалить | Chromestatus Tracker | Ошибка Chromium

Это событие существовало для поддержки свойств совместимости Gecko position и totalSize . Поддержка всех трех была прекращена в Mozilla 22, а функциональность давно заменена ProgressEvent .

     var progressBar = document.getElementById("p"),
          client = new XMLHttpRequest()
      client.open("GET", "magical-unicorns")
      client.onprogress = function(pe) {
        if(pe.lengthComputable) {
          progressBar.max = pe.total
          progressBar.value = pe.loaded
        }
      }

Удалить префиксы расширений зашифрованных медиафайлов

TL;DR : Префиксные зашифрованные расширения мультимедиа были удалены в пользу замены на основе спецификации без префиксов.

Намерение удалить | Chromestatus Tracker | Ошибка Chromium

В Chrome 42 мы отправили основанную на спецификации версию без префиксов зашифрованных медиарасширений. Этот API используется для обнаружения, выбора и взаимодействия с системами управления цифровыми правами для использования с HTMLMediaElement .

Это было почти год назад. И поскольку версия без префикса имеет больше возможностей, чем версия с префиксом, пришло время удалить версию API с префиксом.

Удалить поддержку свойств SVGElement.offset

TL;DR : Свойства смещения для SVGElement были отменены в пользу более широко поддерживаемых свойств HTMLElement .

Намерение удалить | Chromestatus Tracker | Ошибка Chromium

Свойства смещения уже давно поддерживаются как HTMLElement , так и SVGElement ; однако Gecko и Edge поддерживают их только в HTMLElement . Для улучшения согласованности между браузерами эти свойства были объявлены устаревшими в Chrome 48 и теперь удаляются.

Хотя эквивалентные свойства являются частью HTMLElement , разработчики, ищущие альтернативу, также могут использовать getBoundingClientRect()