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

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

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

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

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

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

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

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

Document.defaultCharset удален.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В 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 | Ошибка хрома

Это событие существовало для поддержки position свойств совместимости Gecko и 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 | Ошибка хрома

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

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

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

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

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

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

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